Git:生成今年更改的所有文件列表的有效方法(在当前分支上)
我需要生成一个列表,列出今年更改的所有文件 以下代码段执行此任务,但运行大约需要10分钟:Git:生成今年更改的所有文件列表的有效方法(在当前分支上),git,bash,Git,Bash,我需要生成一个列表,列出今年更改的所有文件 以下代码段执行此任务,但运行大约需要10分钟: for i in $(git ls-files) do if [[ $(git log -1 --date=short --format="%ad" -- $i) =~ 2016- ]] then echo $i fi done 如何以更有效的方式完成这项工作?基于一个文件,您可以简单地执行git diff--stat HEAD'HEAD@{2016-01-01}
for i in $(git ls-files)
do
if [[ $(git log -1 --date=short --format="%ad" -- $i) =~ 2016- ]]
then
echo $i
fi
done
如何以更有效的方式完成这项工作?基于一个文件,您可以简单地执行
git diff--stat HEAD'HEAD@{2016-01-01}
这项工作,并且还列出了在任何提交过程中接触过的文件,这些文件可能在当前版本中不再存在,或者可能已经分阶段存在或不存在:
git log --since=2016-01-01 --format=format:%H | \
xargs git show --format=format: --name-only | \
grep . | sort -u
这将比你的尝试更快,但它仍然会做很多工作;您必须查看它是否足够快,适合您的特定存储库
如果您不需要完整的信息(例如,关于现在丢失的文件),只需在一年中的第一次提交和您的头部之间做一个
git diff
。您有多少次提交?对所有文件使用stat
或date
如何?如果使用分支测试,我会得到错误的结果。然后它将使用合并点,而不是文件更改的时间点
git diff --name-only $(git rev-list -1 --first-parent --before=2016-1-1 HEAD)