git: автозаполнение хэша - PullRequest
       1

git: автозаполнение хэша

9 голосов
/ 21 сентября 2010

Есть ли возможность настроить git для автозаполнения хэшей при нажатии TAB ?

Редактировать:

Обратите внимание, что этот вопрос не о autocomplete , но около hash autocomplete .Смотрите мой комментарий к ответу VonC.

Ответы [ 4 ]

12 голосов
/ 21 сентября 2010

Вы можете ссылаться на коммит только по его нескольким первым символам: git автоматически завершит работу:

git checkout 9771

Таким образом, вам фактически не нужно вводить полный хэш!

2 голосов
/ 21 сентября 2010

Если вам нужно учитывать все хэши из вашего репо, это маловероятно, потому что он не будет хорошо масштабироваться (если у вас есть несколько сотен коммитов, тегов, ... каждый со своими собственными хешами, это быстро заняло бы много времени, чтобы перечислить их все, если у вас нет какой-либо системы кэширования для этого хэш-списка)

Если вы ограничите хэши сравнительно недавним списком (например, в текущей ветви), но это не охватит все варианты использования.

У вас есть здесь пример оболочки git другого типа, если расширение вкладок (в PowerShell), , дополнительно улучшенное здесь .
Даже если ваша среда не используется для PowerShell, это дает вам представление о реализации «раскрытия вкладок».

1 голос
/ 14 марта 2012

Извините, я не эксперт по Bash.Но я только что попытался скомпилировать что-то подобное для семейства csh, и это должно быть легко преобразовано в скрипт завершения bash для тех, кто знает bash.

Командная строка, которую я использую, чтобы получить полезный недавний коммитхэши похожи на:

(git branch | cut -c3-) ; (git branch | cut -c3- | xargs -ibranch git log -n 100 --pretty=format:%+H branch | sort -u)

Эта строка работает как для bash, так и для csh.

В основном это объединение имен веток:

git branch | cut -c3-

ипоследний (с n равным 100) именам коммитов (= полные хэш-числа)

git branch | cut -c3- | xargs -ibranch git log -n 100 --pretty=format:%+H branch | sort -u

Полный оператор автозаполнения для csh будет таким:

#
# tcsh completion for Git
#
# Taken from: https://gist.github.com/1663989
# and from: https://gtirtha.wordpress.com/2010/05/14/git-autocomplete/
# extended and merged them into what I (Ingo Schmiegel) like

set _git_commands = (add am cherry-pick commit branch format-patch ls-files help remote merge pull push amend grep rebase reset revert bisect diff difftool blame log checkout fetch stash status wdiff config)
set _git_aliase = `git config --get-regexp 'alias.*' | sed -e 's,alias.,,' | cut -d' ' -f1`

complete git "p/1/($_git_commands $_git_aliase)/" \
  "n/help/($_git_commands $_git_aliase)/" \
  'n/add/`git status --porcelain|cut -c4-|xargs echo`/' \
  'n/br/`git branch|cut -c 3-`/' 'N/br/`git branch|cut -c 3-`/' \
  'n/branch/`git branch|cut -c 3-`/' 'N/branch/`git branch|cut -c 3-`/' \
  'n/cb/`git branch|cut -c 3-`/' \
  'n/cherry-pick/`(git branch|cut -c3-);(git branch|cut -c3-|xargs -ibranch git log -n 100 --pretty=format:%+h branch|sort -u)`/' \
  'n/co$/`git branch|cut -c 3-`/' \
  'n/config/(--global --get-regexp --list)/' \
  'n/diff/(--color-words --name-only)/' \
  'n/difftool/(--no-prompt --prompt --tool)/' \
  'n/fetch/`git remote`/' \
  'n/format-patch/`(echo --output-directory --stdout --signoff);(git branch|cut -c3-);(git branch|cut -c3-|xargs -ibranch git log -n 100 --pretty=format:%+h branch|sort -u)`/' \
  'n/log/`git branch|cut -c 3-|xargs echo -- --name-only --name-status --reverse --committer= --no-color --relative --ignore-space-change --ignore-space-at-eol --format=medium --format=full --format=fuller --color --decorate --oneline --summary`/' \
  'n/lg/`git branch|cut -c 3-|xargs echo -- --name-only --name-status --reverse --committer= --no-color --relative --ignore-space-change --ignore-space-at-eol --format=medium --format=full --format=fuller --color --decorate --oneline --summary`/' \
  'n/ls-files/(--cached --deleted --others --ignored --stage --unmerged --killed --modified --error-unmatch --exclude= --exclude-from= --exclude-standard --exclude-per-directory= --full-name --abbrev)/' \
  'n/merge/`git branch|cut -c 3-|xargs echo --no-commit --no-ff --ff-only --squash`/' \
  'N/merge/`git branch|cut -c 3-`/' \
  'n/pull/(--rebase --no-ff --squash)/' \
  'n/push/`git remote`/' 'N/push/`git branch|cut -c 3-`/' \
  'n/rebase/`git branch|cut -c 3-| xargs echo --continue --abort --onto --skip --interactive`/' \
  'N/rebase/`git branch|cut -c 3-`/' \
  'n/remote/(show add rm prune update)/' 'N/remote/`git remote`/' \
  'n/reset/(HEAD^)/' \
  'N/reset/(HEAD^)/' \
  'n/revert/`(echo --edit --no-edit --no-commit --mainline);(git branch|cut -c3-);(git branch|cut -c3-|xargs -ibranch git log -n 100 --pretty=format:%+h branch|sort -u)`/' \
  'n/stash/(apply list save pop clear show drop create branch)/' \

Обратите внимание, что это не происходит автоматическиобнаружить начало хэша, а затем может его автозаполнить.Автозаполнение csh основано на контексте предыдущего слова.В этом примере я использую завершение хэша только для команд git cherry-pick, format-patch и revert.

0 голосов
/ 21 сентября 2010

В Linux у вас есть оболочка git: dev-vcs / git-sh, dev-util / easygit. Более того, если вы включите завершение bash для git, вы получите автозаполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...