2017-06-16 63 views
2

假設我的開發分支在v 1.0.1-SNAPSHOT上,我的主服務器在1.0.0上。 我必須創建一個修補程序。使用SourceTree的Git Flow菜單(或任何其他工具),我從master創建修補程序分支,我將poms更新到v 1.0.0.1(使用mvn版本:set -DnewVersion = 1.0.0.1),然後執行修復。爲多模塊maven項目合併Git流修補程序的最佳工具

當我使用Git-Flow完成修補程序時,我必須合併回開發分支。這意味着pom文件將會發生衝突。如果我有一個大模塊樹的多模塊項目,所有的poms都必須解決。在兩個分支中更改的其他文件也會發生衝突。

考慮到在修補程序期間沒有對poms進行任何更改,可以使用develop分支上的版本來解決它們。

這必須爲每個修補程序完成,但例如使用SourceTree,從視覺上很難區分poms和其他衝突文件。這將是很好,我可以以某種方式分開這些文件,我可以放心地忽略和合並接受開發分支上已有的內容。

這是什麼最好的方法?

+0

你是唯一一個在「開發」分支上工作的人嗎? –

回答

0

這是一個很好的git流問題。

在您的場景中,您尚未提到在版本之外對POM進行更改,但這是熱修復中的可能性。除了一些非常漂亮的git技巧,我們手工解決這個問題。

在我們的工作流程中,我們執行手動合併解決方案,然後使用maven確保我們有正確的快照版本集。

mvn versions:set -DnewVersion=1.0.1-SNAPSHOT -DgenerateBackupPoms=false 

然後,我們運行我們的測試,並稱它爲一天。

我一直在閱讀約git rerere,並認爲這可能是超級有用的。

這個名字代表了「重用記錄分辨率」和顧名思義,它可以讓你要問的Git記住,以便下一次看到同樣的衝突,Git的可你是如何解決的大塊衝突自動爲您解決。 More here

這是大多數開發團隊超級惱人的問題,我很感興趣,看到別人的解決方案!

1

我知道的最簡單的解決方案是使用一個屬性的版本,而不是文字將它們定義到pom文件中。這是從Maven 3.5.0可用。

你可以這樣說:

<project ...> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <groupId>org.apache</groupId> 
    <artifactId>apache</artifactId> 
    <version>18</version> 
    </parent> 
    <groupId>org.apache.maven.ci</groupId> 
    <artifactId>ci-parent</artifactId> 
    <name>First CI Friendly</name> 
    <version>${revision}</version> 
    ... 
</project> 

現在,您可以通過構建它:

mvn -Drevision=1.2.0-SNAPSHOT clean package 

但是,這將意味着在每次通過命令行是調用Maven的時間定義修訂有點麻煩。因此,您可以通過.mvn/maven.config文件使用該解決方案,其中包含:

-Drevision = 1.2。0-快照

可以Maven的中定義的屬性POM本身是這樣的:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <groupId>org.apache</groupId> 
    <artifactId>apache</artifactId> 
    <version>18</version> 
    </parent> 
    <groupId>org.apache.maven.ci</groupId> 
    <artifactId>ci-parent</artifactId> 
    <name>First CI Friendly</name> 
    <version>${revision}</version> 
    ... 
    <properties> 
    <revision>1.0.0-SNAPSHOT</revision> 
    </properties> 
</project> 

這意味着你必須只在該版本定義,而不是在每個模塊等單一位置

多模塊的設置工作也是這樣,其中一個以上父母的孩子看起來是這樣的:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <groupId>org.apache.maven.ci</groupId> 
    <artifactId>ci-parent</artifactId> 
    <version>${revision}</version> 
    </parent> 
    <groupId>org.apache.maven.ci</groupId> 
    <artifactId>ci-child</artifactId> 
    ... 
</project> 

但要注意,你必須使用flatten-maven-plugin在您喜歡deploy such artifacts to a repository或只想做mvn install的情況下。這需要看起來像這樣:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <groupId>org.apache</groupId> 
    <artifactId>apache</artifactId> 
    <version>18</version> 
    </parent> 
    <groupId>org.apache.maven.ci</groupId> 
    <artifactId>ci-parent</artifactId> 
    <name>First CI Friendly</name> 
    <version>${revision}</version> 
    ... 
    <properties> 
    <revision>1.0.0-SNAPSHOT</revision> 
    </properties> 

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>flatten-maven-plugin</artifactId> 
     <version>1.0.0</version> 
     <configuration> 
     <updatePomFile>true</updatePomFile> 
     </configuration> 
     <executions> 
     <execution> 
      <id>flatten</id> 
      <phase>process-resources</phase> 
      <goals> 
      <goal>flatten</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>flatten.clean</id> 
      <phase>clean</phase> 
      <goals> 
      <goal>clean</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
    </build> 
    <modules> 
    <module>child1</module> 
    .. 
    </modules> 
</project> 

這意味着你只在你的項目的版本被界定,應該減少這種急劇合併問題一行結束。

請仔細閱讀文檔!

請僅使用${revision},${changelist}${sha1}目前不支持其他屬性。