2012-12-05 43 views
1

我的團隊是SVN的新手,我認爲我們犯了一個錯誤,每個開發者創建自己的分支並開始向他們自己的分支添加代碼。現在,我需要將所有分支合併到一個主幹中。有沒有一種安全的方法來做到這一點?我一直在研究它,但當分支中存在文件時,我不斷收到「樹衝突」錯誤,該文件不在中繼中。大部分文件將被添加,除了少數會產生錯誤的文件。如何在SVN中的多個開發者分支合併後創建一個主幹(Tortoise SVN)

幹線最初是空的,我試圖一次合併一個分支。

我們使用的是Tortoise SVN 1.7.9。

這是我們目前的結構。

projectFoo 

    - branches 
     - dev1 
      - proj1 

     - dev2 
      - proj1 

     - dev3 
      etc... 

    - trunk 
     - <empty> 

回答

2

因爲每個人都在自己的分支工作,而且分支之間沒有任何關係,所以你會過得很開心。在編程意義上,這不是合併。一個真正的合併意味着你分裂分支「A」分支「B」,所以這兩個分支有一個共同的祖先修訂,你現在合併從「A」到「B」或「B」到「一個」。

有沒有簡單的方法來做你需要做的。如果幸運的話,所有開發人員都在開發獨立的代碼,所以合併只是將分支合併在一起,而不會產生真正的衝突。如果開發人員正在處理同一個文件,但在不同的分支中,則會遇到問題。

合併時需要使用--ignore-ancestors參數,因爲沒有祖先。這是我唯一可以說的。但是,一旦你克服了這種痛苦,你可以決定使用更加標準的方式來處理分支和合並。有兩種範例 實際上很好用。 (有幾個人,但他們基本上無毒):

  • 不穩定幹線:我個人最喜歡的。每個人都從樹幹上工作。這是上帝設計Subversion工作的方式。必要時分支僅需。必要時的定義有點模糊。基本上,當你需要時你可以分支,因爲你不想讓開發者閒置。

  • 流發展時:物流發展,你有一個集成流(通常幹線)和開發人員創建_development流(又名分支機構)做好自己的工作。開發流可能是開發人員的個人工作空間,敏捷任務,Jira問題,功能。你基本上創建了一個幹線分支,完成工作,rebase(又名從主幹合併到開發 分支 )和_deliver(又名從開發流合併回主幹)。

正如你所看到的,在不穩定樹幹,一切都非常簡單,因爲很少有分枝回事。而且,由於每個人都是幹活的,所以他們與每個人的溝通都會更好一些,而且他們會接受更小的發展。與持續集成結合使用時效果很好。

你什麼時候在Unstable Trunk中分支?通常當你開始完成一個修訂時,開發人員開始着手當前修訂,然後開始下一個修訂。假設每個人都在開發1.2版本。每個人都在幹線上工作。當你到了一些開發人員完成1.2的工作並且想要在1.3版本上工作的時候,並且1.2版本中仍然有一些清理工作要做,你可以從trunk中分支一個1.2版本的分支。

在1.3版本上工作的開發人員繼續在主幹上工作。開發人員在1.2版本上加強了1.2版本的開發工作。當我準備發佈1.2版本時,1.2版本將在1.2版本中完成,並在1.2版本上進行標記。如果需要修補程序/修補程序版本1.2.1,則它也在1.2分支上完成。

如果在1.2分支上發現了一個問題,並且它也是主幹上1.3版本的問題,那麼您可以輕鬆地將1.2上的該特定更改合併回主幹,因爲1.2分支來自主幹。

流發展受到敏捷人羣的青睞,因爲它允許您挑選並選擇包含在集成分支(又名幹線)中的內容。許多時候,軟件在衝刺幾乎完成之前不會傳送到主幹中。喜歡這種方法的人喜歡它,因爲它提供了靈活性,但我不喜歡它,因爲持續集成對此方法效果不佳。此外,通常在發佈前幾天纔會有體面的構建。