说明:
我们有一个多模块Maven项目,我们使用Jenkins作为CI工具。我的主要目标是检测上次提交影响了哪些模块,并仅构建那些模块(及其依赖项)。我已经对SO和博客文章进行了几次搜索,并决定使用这种方式:
<branch-name>
(获得当前提交的哈希值和最后一次提交的哈希值。它给我2个输出hash1和hash2)<hash1>
<hash2>
(以获取最后两次提交之间的差异)此行之后的输出是:
M moduleA/src/main/java/path/to/changed/files
M moduleB/src/main/java/path/to/changed/files
mvn install -amd -pl ${changed_module_names}
一切正常。但是还有另一个问题。
问题:
让我们说我对本地计算机中的代码做了一些更改,并且我知道远程存储库中也有一些更改。因此,我使用以下命令将其推送到远程:
<branch>
执行完这些命令后,我可以在远程存储库中看到一个(!)提交历史记录,可以:
但是在第二种情况下,假设我不知道远程存储库中的更改。所以我用:
<branch>
<branch>
这些步骤之后,我在远程存储库中看到两个提交历史记录:(“ test”是我的实际提交)
因此它与我们的Jenkins脚本产生冲突:
git rev-list --parents -n 1 `<branch-name>`
因为在这种情况下,它输出3个散列而我希望有2个输出。
如何处理这种情况?可能有人会忘记在git push之前先进行git pull,这会破坏我们的管道。
如果需要更多说明,请告诉我