【发布时间】:2012-02-23 17:04:36
【问题描述】:
我想列出 git 存储库中大量文件的最后提交日期。
为了具体起见,让我们假设我想获取特定子目录中所有*.txt 文件的最后提交日期。存储库中总共有数万个文件,相关*.txt 文件的数量在数百个左右。存储库中已经有数千个提交。
我尝试了三种不同的方法。
解决方案 1。 This question 给出了一个答案,基于 git log。但是,如果我尝试做这样的事情,它会很慢:
find . -name '*.txt' |
xargs -n1 git log --format=format:%ai -n1 --all -- '{}'
在我的测试用例中,它花了几分钟——对于我的目的来说太慢了。
解决方案 2。 这样的事情会快得多,不到一秒:
git log --format=format:%ai --name-only .
但是,我必须编写一个脚本来对输出进行后处理。此外,上面的命令会打印出 lots 永远不需要的信息:不相关的文件和旧的提交。
解决方案 3. 我也尝试过类似的方法,以删除不相关的文件:
git log --format=format:%ai --name-only `find . -name '*.txt'`
然而,这比解决方案 2 慢。(运行时间相差 3 倍。)此外,它仍然会打印不再需要的旧提交。 p>
问题。我错过了什么吗?有没有快捷方便的方法?当我们有更多的提交时,最好是不仅现在而且将来也可以使用的东西?
【问题讨论】:
-
你试过用 grep 代替 find 吗? IE。
git log --format=format:%ai --name-only | grep "*\.txt" -
@deiga:这不正是上面的“解决方案 2”,即获取所有内容的日志并进行一些后期处理吗?
标签: git