2011-01-28 64 views
0

我目前有我的SVN存儲庫以下設置:顛覆主幹合併到現有的標籤

-Root 
--ProjectA 
----trunk 
----tags 
----branches 
--ProjectB 
----trunk 
----tags 
----branches 
--ProjectPool 
----projectA 
----projectB 

凡ProjectPool包含項目A和項目B的特定標籤。現在

的標籤ProjectPool變化不時。這意味着項目A的特定主幹版本將提交和我想創建這些版本的拷貝到根/ ProjectPool /了projectA。新的標籤應該替換舊的標籤,但應該有可用的歷史記錄。

它喜歡有我的電腦上一個分支,我從來沒有改變,並時不時地合併到主幹它。但它應該完全在存儲庫上完成。 (無需簽入/籤等)

這將讓我尋找到根/ ProjectPool /了projectA的歷史,看看它的變化。一種高級修訂歷史。

UPDATE:
對不起,我忘了問一個清晰的問題-.-
查看已抵達到現在爲止的答案後,我會說,項目在ProjectPool的副本均爲分支原來的項目。然後,我可以隨時將它們從主幹合併到我需要ProjectPool中的新版本。
現在的問題是,如果有一種方法做合併「在線」,而無需首先創建一個工作拷貝。

回答

7

> >現在ProjectPool中的標籤會不時變化。

Tags是里程碑,它們不應該改變。您應該在每個版本中創建一個新標籤。

> >這意味着項目A的特定主幹版本將提交,我想從這個版本到根/ ProjectPool /了projectA創建副本。新的標籤應該替換舊的標籤,但應該有可用的歷史記錄。

你所需要的是什麼ProjectAProjectPoolbranch,你可以重複使用的ProjectAtrunk合併。像這樣的東西

svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH] 

參考:http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.merge.html

> >這將讓我尋找到根/ ProjectPool /了projectA的歷史,看看它的變化。一種高級修訂歷史。

貌似你們用自己的目錄結構先行一步。如果可能的話,我建議你遵循這個結構。

-Root 
    +--ProjectPool 
     +--ProjectA 
      +----trunk 
      +----tags 
      +----branches 
     +--ProjectB 
      +----trunk 
      +----tags 
      +----branches 

可以釋放項目A和項目B在其tag秒。更新的開發將繼續在trunk。對於任何一方的開發或現貨發佈,請在分支目錄中創建一個branch。分支完成後,將其合併回主幹。這樣您的trunk將始終反映所有修訂和更改。而且,這更方便(和傳統)。

希望這會有所幫助。

+1

+1完美的解釋 – 2011-01-28 09:33:59

0

你真的不作出任何問題,所以我不知道你是否已經意識到了merge子命令但這是一個你需要的:

要特別注意到--accept參數;你需要它,以獲得自動化解決衝突:

C:\>svn help merge 
[...] 
    --accept ARG    : specify automatic conflict resolution action 
          ('postpone', 'base', 'mine-conflict', 
          'theirs-conflict', 'mine-full', 'theirs-full', 
          'edit', 'launch') 

我也建議你閱讀Subversion書中的Branching and merging章。安全/健全回購佈局