使用git查看特定文件扩展名在子目录中的所有日志记录

32

我想查看存储库历史记录中特定扩展名文件的提交记录。

如果目录结构如下:

$ tree
.
├── a.txt
├── b
└── subdir
    ├── c.txt
    └── d

这是完整的历史记录:

$ git log --name-only --oneline 
a166980 4
subdir/d
1a1eec6 3
subdir/c.txt
bc6a027 2
b
f8d4414 1
a.txt

如果我想查看具有 .txt 扩展名的文件的日志:

$ git log --oneline *.txt
f8d4414 1
它只返回当前目录中的文件,不包括子目录中的文件。我想包含当前目录中所有可能的子目录。

我也尝试过:
$ git log --oneline */*.txt
1a1eec6 3

并且:

$ git log --oneline *.txt */*.txt
1a1eec6 3
f8d4414 1

对于这种情况来说,这样做是可行的,但对于更通用的情况来说并不实际。

还有:

$ git log --oneline HEAD -- *.txt
f8d4414 1

未成功。


它必须是一个git解决方案,还是你可以简单地grep列表? - Benjamin W.
1
是的,我需要使用git,因为我正在编写一个脚本,它使用其他带有更多选项的git命令,并且我不想让git处理所有文件,只处理特定扩展名的文件。 - hector
1个回答

37

尝试:

git log --oneline -- '*.txt'

--用于指示只有位置参数会跟随。而'*.txt'会搜索当前目录及其下面的所有文件夹。

或者,您可以通过在子目录中启动搜索来限制结果,例如-- 'sub/*.txt'


谢谢!这很奇怪,因为它在*.java和*.rb扩展名中没有单引号也可以工作。 - hector
如果你想检查子目录,那么 '*.txt' 扩展名是必须的。我刚在 Git 版本 1.9.1 中尝试过了。 - hector
谢谢 @hector - 在我的机器上运行正常,不需要引号...不太清楚出了什么问题...无论如何,我会从我的回复中消除歧义(至少我们知道带引号的方式是可行的) - sfletche
4
没有引号时,该内容会在 Git 看到之前被您的 shell 展开。 - Tavian Barnes
2
Shell会将*.txt扩展为当前工作目录中的文件,除非没有要扩展的文件,在这种情况下,Shell将*.txt作为参数传递。将'*.txt'放在引号中意味着Shell不会扩展该参数。这就是为什么有时单引号是不必要的,但有时是必需的原因。 - Eljay
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接