我在windows上使用git和git bash,每次我想在git命令中自动完成文件名时,我都会在我已经键入的字符和已完成的字符之间发布fatal: Not a git repository: '.git'
。
它看起来像这样:
$ git diff a
<using tab>
$ git diff afatal: Not a git repository: '.git'
pp.js
我仍然可以通过按enter键来正确地发出命令。但这真的开始让我紧张起来。
有什么建议吗?
问题是我的src文件夹中有一个额外的.git
-文件夹。存储库是在上面的文件夹(src/..
)上初始化的,这似乎与git有关。删除额外的.git
文件夹后,问题消失了。
我刚刚发现了解决方案。我在src
文件夹中有一个额外的.git
目录,它似乎与git混淆了(存储库是在上面的文件夹上初始化的)。
在我删除了额外的.git
文件夹后,问题就解决了。
它可能取决于您使用的msysgit版本:
我刚刚用最新的msysgit1.8.3在W7 64位的git diff上测试了一个tab完成,它运行得很好。
别忘了,除了msysgit版本之外,由于myysgit中包含的旧bash 3.1,您还会遇到选项卡完成问题
而且在Windows上完成可能很慢。
正如OP Zeeker在下面提到的,完成git-completion.bash
是基于正确的git-reo路径检测。
# __gitdir accepts 0 or 1 arguments (i.e., location)
# returns location of .git repo
__gitdir () {
...
}
在Zeeker的案例中,src
文件夹中有一个额外的.git
文件夹,这意味着任何完成都是基于错误的文件夹,这对git diff
来说是致命的git add
似乎有效。
cd /etc
mv /etc/git-completion.bash /etc/git-completion.bash.orig
然后根据的内容创建一个新的https://github.com/git/git/blob/master/contrib/completion/git-completion.bash