如何查找自上次在GIT中提交构建以来所有已更改的文件?我不仅要在头版本中构建已更改的文件,还要构建自上次成功构建以来所有已更改的文件。
git show --pretty =“format:” - name-only仅针对热门提交更改文件进行构建。像这样,我需要为自上次成功构建以来的不同提交中的所有已更改文件构建。
就像,最后一次构建在Jenkins的X SHA-1 id中完成,之后,还有3次提交。所以,我的目标是检查整个存储库代码库直到head,然后查找在X SHA-1 id之后更改的所有文件的列表,这是在X SHA-1 id的最后一次提交之上的3次提交?
由于
答案 0 :(得分:18)
派对迟到了,但稍微好一点的方法是在git diff上使用--name-only
功能。我用的是如下:
git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT
这样你以后就不必做一些管道工作了。
答案 1 :(得分:5)
根据https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-Environmentvariables,Jenkins提供了环境变量:
我打算利用这些来完成类似的事情。
所以你想要的是:
tar cvzf /tmp/build.tar.gz `git diff --stat $GIT_PREVIOUS_COMMIT $GIT_COMMIT | grep '\|' | awk '{print $1}'`
答案 2 :(得分:4)
我不完全确定我会关注你的问题,但需要考虑两件事:
git diff --stat {X SHA-1 ID}
应该适用于您正在寻找的内容。或者,您可以更明确地执行git diff --stat {X SHA-1 ID} {X SHA-1 ID + 3 commits}
,它将为您提供两次提交之间的文件更改。这将输出如下内容:
Library/ENV/4.3/cc | 3 ++-
Library/Formula/cmu-sphinxbase.rb | 10 +++++++---
Library/Formula/fb-client.rb | 11 +++++++++++
我把它作为练习让读者将该输出解析为一个文件列表。
您可能应该在Jenkins中进行完整,干净的构建,而不仅仅是构建某些文件。您最终可能会被构建文件之间的奇怪不兼容性所困扰。但这超出了这个问题的范围。
将此问题分解为部分:
$CUR_HASH
)并在Jenkins上次构建时提交(Last Build Revision,我们称之为$LAST_HASH
)。听起来你已经拥有了这些,如果没有,那就超出了问题的范围。$LAST_HASH
和$CUR_HASH
之间更改的文件列表 - 这是上述git diff --stat $LAST_HASH $CUR_HASH
命令,它将打印出类似上述内容。 从输出获取 文件名 - 在bash中执行此操作,您可以将git diff
的输出传递给grep '\|'
获取 带有文件名的行,然后将其传递给awk '{print $1}
以获取 文件名,而不使用统计信息。所以命令现在就像:
git diff --stat $LAST_HASH $CUR_HASH | grep '\|' | awk '{print $1}'
从创建tarball 更改的文件 - 您可以将上述输出发送到tar,如下所示:
tar cvzf /tmp/build.tar.gz `git diff --stat $LAST_HASH $CUR_HASH | grep '\|' | awk '{print $1}'`
我认为这涵盖了您尝试做的所有事情。显然,这些命令不能只是复制/粘贴,因为我不了解你的环境,但这是一个好的开始。
答案 3 :(得分:0)
如果詹金斯需要这个。
prev_merge=$(git log |grep -C1 Merge | grep commit |head -n1 | awk {'print $2'})
commit=$(git log |head -n 1 | awk {'print $2'})
git diff --name-only $prev_merge $commit
答案 4 :(得分:0)
也许这就是您要寻找的:
git whatchanged origin/master -n 1
这将告诉您自上次提交构建以来所有更改的文件。
要了解有关git-whatchanged命令的更多信息:https://git-scm.com/docs/git-whatchanged/1.8.3
此外,如果您只想知道先前提交的更改,则修改后的命令是:
git whatchanged -n 1
希望获得帮助。