我正在使用cvs2svn轉換我的存儲庫。我已經在一個存儲庫中成功完成了,現在我的新問題是第二個存儲庫。cvs2svn包含單個分支和頭部?
在我的新轉換中,我只想轉換HEAD和一個分支。 cvs2svn只對分支有「排除」功能,但不包含「包含」。我有許多分支機構,不包括每一個,他們每一個將採取很多工作....
是否有任何方式轉換隻有樹幹(HEAD),只有一個分支?
感謝, 俄德
我正在使用cvs2svn轉換我的存儲庫。我已經在一個存儲庫中成功完成了,現在我的新問題是第二個存儲庫。cvs2svn包含單個分支和頭部?
在我的新轉換中,我只想轉換HEAD和一個分支。 cvs2svn只對分支有「排除」功能,但不包含「包含」。我有許多分支機構,不包括每一個,他們每一個將採取很多工作....
是否有任何方式轉換隻有樹幹(HEAD),只有一個分支?
感謝, 俄德
如果你只是想保留一個分支和無標籤,那麼這很容易。一個符號相匹配的第一條規則被使用,因此指定要被列入然後在該分支排除一切:
cvs2svn --force-branch=mybranch --exclude='.*' ...
如果你想不僅包括分支,而且許多標記爲可能的,那麼這是有點棘手。您不但不一定知道所有標籤的名稱,還不能包含依賴排除分支的標籤。在這種情況下,它是最容易與--write符號,信息和--symbol-提示選項的工作:
cvs2svn --write-symbol-info=symbol-info.out --passes=1:3 ...
這將創建一個名爲「符號info.out」包含有關所有文件CVS符號。在你的編輯器中,打開這個文件,找到你想要排除的分支對應的所有行,並將這些行的第三列改爲單詞「排除」。確保要包含的分支行的第三列包含單詞「分支」,並且其第四列是您希望它結束的路徑。
現在再次運行cvs2svn,起始於3趟,並使用編輯符號信息的文件爲標誌提示文件:
cvs2svn --symbol-hints=symbol-info.out --passes=3 ...
,你會得到很多類似的錯誤:
ERROR: ExcludedSymbol('FOO_BRANCH') cannot be excluded because the following symbols depend on it:
BAR_TAG
BAZ_TAG
現在回到編輯器並更改列出的標籤(示例中爲BAR_TAG和BAZ_TAG)以排除,然後再次嘗試運行pass3。這個過程可能需要迭代幾次,但它不應該很麻煩,因爲pass3運行速度非常快。
當你得到PASS3完成沒有錯誤,運行轉換的其餘部分。
cvs2svn --symbol-hints=symbol-info.out --passes=4: ...
一個問題是cvs2svn不僅需要確定是否包括分支或沒有,但(同時)一個符號是否是分支或擺在首位的標籤。所以如果你想要包含一個分支和一些標籤,那麼比僅僅包含「那個分支」更難 - 這樣做會殺死所有標籤。
IOW,cvs2svn並不真的支持這一點。您可以通過編輯其源代碼來解決問題。在cvs2svn_lib.symbol_strategy.BranchIfCommits,在那裏它返回科(符號)來
if symbol.name == 'my_branch':
return Branch(symbol)
else:
return ExcludedSymbol(symbol)
IIUC改變的情況下,BranchIfCommits默認情況下應使用。
就個人而言,我會用不同的策略:
1. convert the repository once, with all branches.
2. do a "svn ls" on branches, and redirect that into a file.
3. edit the file to construct an exclude regex out of it, of the form `b1|b2|...|bn`
我不認爲這是工作的很多...
我看到某處寫--froce支= NAME = - 排除的選項* 什麼你認爲? – Oded 2009-08-25 07:13:40
我不認爲它會起作用。如果我正確地讀取了代碼,它們從左到右進行評估,因此首先包含分支,然後排除。不過,它可能會按照相反的順序傳遞選項。 – 2009-08-25 07:24:01
你提到的關於--force-branch的選項不起作用。但是,符號信息的第二個選項非常完美! 謝謝! – Oded 2009-08-27 07:25:22