查找在提交之间发生更改的目录

3
我正在设置一个Jenkins作业,它会迭代项目中的目录,并在每个目录中执行类似的操作。虽然现在由于目录数量较少,遍历所有目录并不是大问题。但我希望只迭代那些在GIT_PREVIOUS_COMMITGIT_COMMIT之间有更改的目录。当前作业的操作如下:
for dir in */
do
  cd $dir
  # test a script exists
  # execute the script
  # upload the result.zip to an S3 bucket
  cd ..
done
2个回答

3
您可以使用带有--name-only选项的git diff。这将列出已更改的文件:
$ git diff --name-only GIT_COMMIT..GIT_PREVIOUS_COMMIT

app/controllers/some_controller.rb
app/models/some_model.rb
app/views/some/show.html.erb
app/views/some/index.html.erb

然后,您可以将其传输到sed以删除文件名。 然后排序和uniq以获得您感兴趣的唯一目录列表:

sed 's,/*[^/]\+/*$,,' | sort | uniq 

app/controllers
app/models
app/views/some

1
我稍微改了一下,使用 cut 命令,因为它的性能更好。git diff --name-only ${GIT_COMMIT}..${GIT_PREVIOUS_COMMIT} | cut '/' -f 1 | sort | uniq - hjpotter92

0

你可以为这些活动添加自己的别名,这非常方便!

在你的 .gitconfig 文件中添加以下内容:

  38   # Difference between HEAD and HEAD^
  39   dbh = "!git ls --numstat -1"
  40   # Difference between two commits
  41   dbc  = "!f() { git diff --name-status $1 $2; }; f"

然后你可以这样使用它们:

 git dbc ab68a12 fc83334 # for diff between two commits.

或者

git dbh # for diff between previous and current HEAD.

Ls是我用来以漂亮的格式显示日志的另一个别名。你可以简单地将ls替换为log --decorate --date=relative。 - Shuvam

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