名称为

时间:2017-11-08 17:23:15

标签: windows git git-bash

我正在尝试获取名称中带方括号的文件的日志。如果重要:操作系统是Windows,我正在使用git bash。

如果您在名称[]中创建[Start_here].bat的文件,那么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'

他们似乎都没有工作。要么它没有显示任何提交,要么显示无关提交列表。

有人有解决方案吗?

注意:

git mv '[Start_here].bat' 'start_here.bat'

git log --follow start_here.bat 

确实显示了文件更改的历史记录。

编辑:

使用在新repo中执行的以下脚本,我可以看到git log正确运行,直到你添加一个子模块。然后它开始列出所有改变子模块的提交......

#!/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不输出与子模块相关的更改

3 个答案:

答案 0 :(得分:5)

在CMD中,尝试:

git log -- "[__Odd__].txt"

git log -- ./"[__Odd__].txt"

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

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

更新1 - 来自评论:

  

你,先生,在Windows的git中发现了一个bug!我可以重现你的git日志,我无法使用linux的git在WSL中重现它,但可以使用WSL中的git.exe重现它!

     

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

<子> 更新2 :这是代码Git软件中的一个真正的错误,由于这个问题已经fixed了!这太棒了?!?!

答案 1 :(得分:4)

Windows上的Git有两种形式: 一个使用Bash shell,另一个使用DOS。 前者称为Git Bash,后者称为Git Cmd。

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

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

另请注意,自动完成功能是您的朋友。 Git Bash和Git Cmd都可以自动完成路径名。 例如,如果您开始键入git log "[,然后按TAB,则在Git Cmd中, 它应该给你一些自动完成的选项。 如果您开始输入git log '[,然后按TAB, 它不会给你任何选择。 这就是你知道语法已经错误的方法,你可以停止输入并尝试其他方式。

答案 2 :(得分:2)

我刚用Git 2.15 for Windows测试了双引号。

适用于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,请在set a simplified PATH之后尝试使用相同的Git日志。