自从上次在GIT中提交构建以来如何查找所有已更改的文件?我不仅要在头版本中构建已更改的文件,还要构建自上次成功构建以来所有已更改的文件.
git show --pretty ="format:" - name-only将仅为顶级提交更改的文件进行构建.像这样,我需要为自上次成功构建以来的不同提交中的所有已更改文件构建.
比如,最后一次构建在Jenkins的X SHA-1 id中完成,之后,还有3次提交.所以,我的目标是检查整个存储库代码库直到head,然后查找在X SHA-1 id之后更改的所有文件的列表,这是在X SHA-1 id的最后一次提交之上的3次提交?
谢谢
for*_*ect 19
派对的晚了一点,但稍微好一点的方法是使用--name-onlygit diff上的功能.我用的是如下:
git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT
Run Code Online (Sandbox Code Playgroud)
这样你就不必再做一些管道工作了.
小智 6
根据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}'`
Run Code Online (Sandbox Code Playgroud)
我不完全确定我明白你的问题,但需要考虑两件事:
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 +++++++++++
Run Code Online (Sandbox Code Playgroud)
我将其作为练习,供读者将输出解析为文件列表。
您可能应该在 Jenkins 中进行完整、干净的构建,而不仅仅是构建某些文件。您最终可能会遇到构建文件之间奇怪的不兼容性问题。但这超出了这个问题的范围。
将此问题分解为几个部分:
$CUR_HASH)并在 Jenkins 上次构建时提交(上次构建修订版,我们将其称为$LAST_HASH)。听起来你已经有了这些,如果没有,那就超出了问题的范围。$LAST_HASH获取在和 之间更改的文件列表$CUR_HASH- 这是前面提到的git diff --stat $LAST_HASH $CUR_HASH命令,它将打印出类似上面的内容。仅从输出中获取文件名- 在 bash 中执行此操作,您可以通过管道传输git diffto的输出以仅grep '\|'获取带有文件名的行,然后通过管道传输 to以仅获取文件名,而不包含统计信息。所以现在的命令是这样的:awk '{print $1}
git diff --stat $LAST_HASH $CUR_HASH | grep '\|' | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)仅从更改的文件创建 tarball - 您可以将上述输出发送到 tar,如下所示:
tar cvzf /tmp/build.tar.gz `git diff --stat $LAST_HASH $CUR_HASH | grep '\|' | awk '{print $1}'`
Run Code Online (Sandbox Code Playgroud)我认为这涵盖了您想要做的一切。显然,这些命令不能只是复制/粘贴,因为我不知道有关您的环境的所有信息,但这是一个好的开始。
| 归档时间: |
|
| 查看次数: |
22117 次 |
| 最近记录: |