2

我在带有 git bash 的 Windows 上使用 git,每次我想在 git 命令中自动完成文件名时,我都会fatal: Not a git repository: '.git'在我已经输入的字符和完成的字符之间发布。

它看起来像这样:

$ git diff a
<using tab>
$ git diff afatal: Not a git repository: '.git'
pp.js

我仍然可以按预期按回车键正确地发出命令。但这真的开始让我感到不安。

有什么建议么?


.git问题是我的 src 文件夹中有一个额外的文件夹。存储库在上面的文件夹中初始化(src/..),这似乎与 git 混淆。删除多余的.git文件夹后,问题消失了。

4

3 回答 3

3

我刚刚发现了解决方案。我的-folder 中有一个额外的.git目录,它似乎与 git 混淆(存储库已在上面的文件夹中初始化)。src

在我删除额外的.git文件夹后,问题消失了。

于 2013-08-05T14:19:21.130 回答
2

它可能取决于您使用的 msysgit 版本:

我刚刚使用最新的 msysgit1.8.3 在 W7 64 位上的 git diff 上测试了一个选项卡完成,它工作得很好。

不要忘记,除了 msysgit 版本之外,由于mysysgit 中包含旧的 bash 3.1 ,您还会遇到制表符补全问题。
并且在 Windows 上完成可能会很慢


正如OP Zeeker 下面提到的,完成git-completion.bash是基于正确的 git repo path detection

# __gitdir accepts 0 or 1 arguments (i.e., location)
# returns location of .git repo
__gitdir () {
...
}

在 Zeeker 的案例中,文件夹 中有一个额外的文件夹.gitsrc,这意味着任何完成都是基于错误的文件夹,对于git diff,这被证明是致命的。
git add似乎工作。

于 2013-08-04T12:30:54.573 回答
0

git 命令的 git-bash 补全由 /etc/git-completion.bash 控制。要修复以管理员身份运行 git-bash,然后:

cd /etc
mv /etc/git-completion.bash /etc/git-completion.bash.orig

然后从https://github.com/git/git/blob/master/contrib/completion/git-completion.bash的内容新建一个

于 2013-07-04T13:05:13.703 回答