2010-10-12 32 views
5

我在Perforce存儲庫中存在以下分支情況:有一條主幹「trunk」和兩個發佈分支「1.0」和「1.1」。客戶特定更改的分支「客戶」已從1.0分支分支出來。現在,客戶希望轉向版本1.1。我如何將1.1分支合併到客戶分支中?客戶特定的更改應該保持1.1的「最高」。Perforce:如何整合多個分支機構?

下面是一個受影響的文件圖:

1.1      -(1)---(2)---(3) 
         /   \  \ 
        /   \  \ 
trunk 100--(101)-(102)--103---104---105---106---107 
      \ 
      \ 
1.0   ---1-----2--... 
       \ 
        \ 
customer   ---1-----2----*3* 

目前的版本我期待在該文件是對客戶分支修訂3。

如果我選擇將分支「1.1」與目標「客戶」集成在一起,我會預期會發現兩者的共同祖先(主線上的修訂版本爲100),並且從那裏導致1.1分支尖端的所有修訂都是合併(括號內的)。

取而代之的是,Perforce只提供合併1.1分支的修訂版本1到3,因爲它錯過了以前在主線上發生的必要更改而失敗。

我如何說服Perforce做到這一點,而無需手動查看每個文件並選擇要合併的修訂版本?也許分支策略是不合適的?我還應該做什麼?

回答

0

爲了整合容易,我會創造trunk_to_custer特定的分支機構和1.1_to_customer然後問題:

cd customer-workspace 
p4 integ -b trunk_to_customer @change-number-at-which-1.1-was-branched 
p4 resolve 

或許是在中間提交這裏,然後

p4 integ -b 1.1_to_customer 
p4 resolve 
p4 submit 
+0

如果我嘗試「p4 integ -b 1.1_to_customer」,那麼對於在客戶分支上發生更改的每個文件,我都會得到「無法從......沒有集成... -i標誌」。如果我添加「-i」,合併失敗,因爲只有1.1分支上的修訂版被集成,而不是那些在主幹上的修訂版。 – hfs 2010-10-12 11:48:07

+0

Perforce不知道更改101和更改102對於分支1.1上發生的事情是必不可少的。因此,在集成1.1之前,您首先必須將主幹高達102的主幹集成到客戶中。 – 2010-10-12 11:58:56

+0

是的,這就是我最後做的:在主線上有兩個標籤,分別標註了1.0和1.1的分支。我首先在這些標籤之間合併了「trunk」,解決了所有問題,然後在1.1之上合併了1.1並再次解決。這解決了。 – hfs 2010-10-14 07:17:27

2

當您嘗試爲了整合來自1.1分支的修訂版本3,Perforce只會告訴你它正在整合那個分支上的修改 - 但是修訂版本1已經包含了修訂版本101和102.當合並時,Perforce將識別中繼版本100作爲confl的共同祖先ict決議。

這是我的經驗,你試圖做的集成應該只是工作。您是否看到集成源中的更改丟失(無法通過不正確的衝突解決方案來解釋),還是僅查看p4 interchanges的輸出?

2

我強烈建議嘗試將客戶的更改合併到主幹中。在客戶想要升級到2.0+自定義更改的幾個月後,它將繼續成爲維護噩夢。

如果您不希望客戶更改反映在您的主項目中,請花些時間重構代碼,以便您可以使用構建標誌或構建配置文件來公開客戶的期望行爲。同時構建在CI中運行的配置,以確保未來的更改不會影響客戶的構建。

相關問題