2013-10-24 44 views
2

我想創建一個svn分支的邏輯進程,其中較新的分支指向前一分支中的文件,而不是這些文件的副本。一旦更改了較新分支中的文件,它就會與舊分支中的副本斷開連接。 (因此,寫入時複製)實際文件不是源代碼,但它們是文本文件。我在這裏探索可能性,並希望對此建議佈局提供反饋意見。版本控制文件的svn copy-on-write語義:svn:externals用例?

我們從一個典型的顛覆場景開始,在底層有分支。當我們創建一個新分支時,它將作爲最新分支的副本開始生活。例如:

^/branches/1/A 
^/branches/1/B 

分支1現在處於維護模式;新的發展繼續分支2

svn copy ^/branches/1 ^/branches/2 

產量

^/branches/2/A (a copy of ^/branches/1/A) 
^/branches/2/B (a copy of ^/branches/1/B) 

我想是不是有A和B是斷開的副本,讓他們成爲指針

^/branches/2/A -> ^/branches/1/A 
^/branches/2/B -> ^/branches/1/B 

因此,分支2中的文件A無縫地「跟蹤分支1中的文件A的變化」。當需要分支2中的文件A與文件A中的br不同時錨1,我們「打破鏈接」,創建一個文件的實際副本,並從那裏去。

從我的閱讀,這可能與svn:externals。而不是svn copy,我會腳本化將分支1的目錄結構複製到分支2中,然後爲每個包含文件的目錄,在目錄上創建一個svn:externals屬性,並使用前一分支中的文件的URL。

這裏是我的問題/問題:

  • 我想這是不可能使從SVN/1/A轉換到分支:在外部組件分支機構/ 2/A複製。我相信這隻有通過將svn:externals定義與修訂相混淆,才能達到整個目的。有沒有像svn:readonly? (不是我能找到的)

  • svn:外部定義不是遞歸的。換句話說,^/branches/3/A - > ^/branches/2/A(它自己指向) - > ^/branches/1/A是不可能的。當有3個分公司,3個和2都必須明確地指向回支1

我試圖完成的主要事情是,一旦一個文件被一些分支建立,進一步分支總是變化該文件自動。這些文件的維護者必須採取一些明確的行動,以「斷開該鏈接」

有沒有更好的方法來設置它?

回答

2

這種寫入時複製功能是什麼FSFS數據庫做下面,而是通過客戶端/服務器不被暴露。

有一個項目AutoMerger可以在SVN確實爲混帳東西格里特效仿。 https://github.com/liveperson/Auto-Merger

,我知道做到這一點其他的供應鏈管理系統本身是StarTeam中。可能Perforce和Mercurial也可以做到這一點。

0

最後,我決定不去使用這種方法,有以下原因:

  • 重量級分支 - 是的,它可以編寫腳本,但這需要維護,基本上意味着腳本編寫者是創建分支的費用

  • 重新組織分支到分支的文件/目錄變得非常複雜。

  • 沒有「遞歸外部」這樣的東西。每個連續分支中的每個副本都必須指向實際文件。看點2號。

相反,我有automerging方法類似(但沒有)AutoMerger去。