Извините, я не эксперт по 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
.