在按 TAB 时,是否有机会配置git
自动填充哈希值?
请注意,此问题不是关于自动填充,而是关于哈希自动填充。 请参阅我对VonC答案的评论。
答案 0 :(得分:11)
您只能通过前几个字符来引用提交:git将在内部自动完成:
git checkout 9771
因此,您实际上不必输入完整的哈希值!
答案 1 :(得分:2)
如果你必须考虑来自你的仓库的所有哈希,这不太可能,因为它不能很好地扩展(如果你有数百个提交,标签,......每个都有自己的哈希,除非你为这个哈希列表设置一些缓存系统,否则很快就需要很长时间才能列出它们。)
如果将哈希值限制在一个相当新的列表中(例如在当前分支上),可能是,但这不会涵盖所有用例。
您有here an example of git shell with different kind if tab expansion(在PowerShell中),further enhanced here 即使您的环境没有使用PowerShell,也可以让您了解“标签扩展”实现。
答案 2 :(得分:1)
对不起,我不是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
命令使用哈希完成。
答案 3 :(得分:-3)
在Linux下你有git shell:dev-vcs / git-sh,dev-util / easygit。此外,如果你为git启用bash完成,你将获得自动完成功能。