我想列出git存储库中大量文件的最后提交日期.
为了具体起见,让我们假设我想获取*.txt特定子目录中所有文件的最后提交日期.存储库中总共有数万个文件,相关*.txt文件的数量在数百个.存储库中已有数千个提交.
我尝试了三种不同的方法.
解答1. 这个问题给出了一个答案,基于git log.但是,如果我尝试做这样的事情,那就很慢了:
find . -name '*.txt' |
xargs -n1 git log --format=format:%ai -n1 --all -- '{}'
Run Code Online (Sandbox Code Playgroud)
在我的测试案例中,花了几分钟 - 对我来说太慢了.
解决方案2.这样的事情要快得多,不到一秒钟:
git log --format=format:%ai --name-only .
Run Code Online (Sandbox Code Playgroud)
但是,我必须编写一个后处理输出的脚本.此外,上面的命令打印出许多永远不需要的信息:无关文件和旧提交.
解决方案3.我也试过这样的东西,以摆脱不相关的文件:
git log --format=format:%ai --name-only `find . -name '*.txt'`
Run Code Online (Sandbox Code Playgroud)
然而,事实证明这比解决方案2 慢.(运行时间有3个不同.)此外,它仍然会打印不再需要的旧提交.
题.我错过了什么吗?有快速方便的方法吗?当我们提交更多数量的提交时,最好是现在还是将来工作的东西?
有没有办法让git给我输出像svn ls -v一样.基本上是每个文件的列表以及最后编辑该文件的人?像这样:
filea.txt Someone Else
fileb.txt Another Person
Run Code Online (Sandbox Code Playgroud)
也许甚至用SHA来识别发生变化的提交?