与名字方括号的git日志

我正在试图获取名称中带有方括号的文件的日志。 以防万一:操作系统是Windows,我使用git bash

如果你使用[] [Start_here].bat这样的名字来创build一个名为[]的文件,那么git log将不起作用。

我试过了:

 git log '[Start_here].bat' git log \[Start_here\].bat git log '\[Start_here\].bat' git log -- '[Start_here].bat' git log -- \[Start_here\].bat git log -- '\[Start_here\].bat' 

而他们中没有一个似乎工作。 要么它没有显示任何提交或显示不相关的提交列表。

有人有解决scheme吗?

注意:

 git mv '[Start_here].bat' 'start_here.bat' git log --follow start_here.bat 

确实显示了文件被更改的历史logging。

编辑:

使用下面的脚本在新的回购执行,我可以看到git日志行为正确,直到你添加一个子模块。 然后它开始列出所有改变子模块的提交…

 #!/usr/bin/env bash set -x rm -rf test-repo rm -rf test-submodule mkdir test-submodule pushd test-submodule git init git config --local user.name tester1 git config --local user.email test@here.com echo "a single line" > file.txt git add file.txt git commit -m "first commit" popd mkdir test-repo pushd test-repo git init git config --local user.name tester1 git config --local user.email test@here.com git branch -m master echo "first line" > somefile.txt git add somefile.txt git commit -m "First line" echo "another line" >> somefile.txt git add somefile.txt git commit -a -m "Second line" echo "A line" > "[__Odd__].txt" git add "[__Odd__].txt" git commit -m "Adding odd file" echo "third line" >> somefile.txt git commit -a -m "Another bold statement." echo "2nd line" >> "[__Odd__].txt" echo "more" >> somefile.txt git add "[__Odd__].txt" somefile.txt git commit -m "changed both in master1" git checkout -b new_branch echo "2nd line" >> "[__Odd__].txt" echo "more" >> somefile.txt git add "[__Odd__].txt" somefile.txt git commit -m "changed both in new_branch" git checkout master echo "2nd line" >> "[__Odd__].txt" echo "more" >> somefile.txt git add "[__Odd__].txt" somefile.txt git commit -m "changed both in master" git submodule add -- ../test-submodule module git commit -m "Added submodule" git log -- "[__Odd__].txt" 

这输出:

 commit c3ebc7e0daf68543d761fc3b06c7ab35e014efaf (HEAD -> master) Author: tester1 <test@here.com> Date: Fri Nov 17 13:06:07 2017 +0100 Added submodule commit 03a935df578a2eaf3f42789bd1e89e313224797a Author: tester1 <test@here.com> Date: Fri Nov 17 13:06:06 2017 +0100 changed both in master commit d617db69dd9468e88587e2363050fdf57ac10756 Author: tester1 <test@here.com> Date: Fri Nov 17 13:06:06 2017 +0100 changed both in master1 commit 88a07e5c887d63ead4e6cedd6349dfaf85ec1866 Author: tester1 <test@here.com> Date: Fri Nov 17 13:06:05 2017 +0100 Adding odd file 

注意最上面的条目,它不应该在这里。 它只与子模块不相关的文件,我想要的日志。

git log -- somefile.txt不会输出与子模块相关的更改

Windows上的Git有两种风格:一种使用Bash shell,另一种使用DOS。 前者叫Git Bash,后者是Git Cmd。

在Git Bash中, git log '[foo]'应该可以工作。 在Git Cmd中, git log "[foo]"应该可以工作(这也适用于Git Bash btw)。

在DOS外壳中,不能使用单引号括起包含特殊字符的字符串。 (在“特殊的壳”意义上的特殊。)在Bash你可以。 这就是为什么,看起来你正在使用Git Cmd。

另外请记住,自动完成是你的朋友。 Git Bash和Git Cmd都可以自动完成路径名。 例如在Git Cmd中,如果你开始输入git log "[然后按TAB键,它会给你一些选项来自动完成,如果你开始输入git log '[ ,然后按Tab键,它不会给你任何选项。这就是你知道语法已经错了 ,你可以停止输入并尝试另一种方式。

我只用Windows的Git 2.15测试了双引号。

它适用于git bash:

 vonc@VONCAVN7:/mnt/d/git/talks$ git log -- "[r].txt" commit 7a698bf83cb55fa479200a3585b03ece1ee5db0a (HEAD -> 201710_docker) Author: VonC <vonc@laposte.net> Date: Mon Nov 13 20:33:04 2017 +0100 test 

或者直接从CMD shell会话:

 vonc@VONCAVN7 D:\git\talks > git log -- "[r].txt" commit 7a698bf83cb55fa479200a3585b03ece1ee5db0a (HEAD -> 201710_docker) Author: VonC <vonc@laposte.net> Date: Mon Nov 13 20:33:04 2017 +0100 test 

为了确保你没有任何其他的程序干扰Git,在设置了一个简化的PATH之后,尝试使用相同的Git日志。

在CMD中,尝试:

 git log -- "[__Odd__].txt" 

要么

 git log -- "[__Odd__].txt" 

证明: https : //imgur.com/7qqsVJ6

如果一切都失败了,你可以安装WSL,并在那里使用git来处理棘手的情况。


从评论更新:

先生,你已经在git中发现了一个bug! 我可以重现你的git日志,我不能在WSL中使用linux的git重现它,但是可以在WSL中使用git.exe重现它!

提交了一份报告: github.com/git-for-windows/git/issues/1371 ,让我们看看它是什么