Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:生成今年更改的所有文件列表的有效方法(在当前分支上)_Git_Bash - Fatal编程技术网

Git:生成今年更改的所有文件列表的有效方法(在当前分支上)

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}

我需要生成一个列表,列出今年更改的所有文件

以下代码段执行此任务,但运行大约需要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}
这项工作,并且还列出了在任何提交过程中接触过的文件,这些文件可能在当前版本中不再存在,或者可能已经分阶段存在或不存在:

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)