這取決於你想要在倉庫中剩下的東西。
如果你想三個分支,v1.0
,v2.0
,v3.5
,所有的結構是這樣的:
/root
/lib
/tools
/src
然後是的,我敢肯定,你可以做到這一點。
-- A -- B -- Current
|
|--- v1.0
|--- v2.0
|--- v3.5
A
,B
,Current
幸福,因爲你遷移到Git修訂已經提交,並在v1.0
,v2.0
和v3.5
基本上都是「死了:你會在分支結構方面有這樣的事情結束了結束「分支。你可以做一些花哨的東西,如果你想獲得一個分支結構更像是:
-- v1.0 --- v2.0 --- v3.5 -- A -- B -- Current
也就是說,獨立v1.0
,v2.0
,並v3.5
到自己的分支機構,然後重訂v1.0
到v2.0
,v2.0
到v3.5
,和v3.5
到當前版本的第一次提交。
但我不確定你想要做什麼。
有沒有辦法在SRC子目錄中的3個版本分爲單獨的分支,而不是保存目錄爲每個版本?
是的,我敢肯定你可以做到這一點。我的方法論有點......錯綜複雜,我承認,但是在這裏。 請,小心,閱讀手冊頁 - 以下命令可能不會搞砸一切,但使用風險自負。
git checkout -b v1.0
- 進入一個新的分支。
刪除除v1.0
以外的所有內容。有幾種方法可以做到這一點。這個問題有一些方法去除一切,除了;我無法讓他們爲我工作,這可能對您更好。
`git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch src/v2.0" --prune-empty -f`
這將刪除src/v2.0
和所有從分支相關聯的歷史。該過濾器不需要-f
;但git-filter-branch
做了某種備份(閱讀手冊頁?),它可能吐出錯誤。第二次你會嘗試git filter-branch
。
重複此操作以刪除src/v3.5
。
這會給你留下src/v1.0
。您可能需要將源碼從src/v1.0
改爲src
;您可以運行一個git filter-branch --subdirectory-filter
(閱讀手冊頁),爲您提供目錄結構/v1.0-files
(僅包含子目錄v1.0
中的文件;已將內容從v1.0
移至root
),然後查看man git-filter-branch
頁面中的示例(特別是底部示例)將文件移入子目錄。這可能是矯枉過正,然後你需要合併到一個包含git filter-branch --subdirectory
剔除的所有其他東西的分支;一個簡單的mv v1.0/* .
可能會工作,但你會在你的歷史中有另一個提交。我不知道你更喜歡什麼。
所以現在你已經有v1.0
在它自己的分支。好極了!
重複執行v2.0
和v3.5
。
恐怕我不能看到這樣做,除了給你......「奇怪的」歷史。據推測v2.0
基本上具有v1.0
+改進;我上面列出的結構(三個「死衚衕」分支)顯示v2.0
和v3.5
不建立在以前的版本上。我不完全相信你有什麼樣的歷史,如果這是一個問題,等等等等
因爲你必須有v1.0
,v2.0
和v3.5
在自己的小樹枝,你可以git merge
他們或git rebase
等等等等,如果你更喜歡更美觀的歷史。
希望這給你一點點思考;就像我說的,請閱讀手冊頁。 :)
您是否有與不同版本目錄相關的提交歷史記錄?當您將CVS回購遷移到git時,您現在有沒有想保留的歷史記錄?我敢肯定,你可以使用'git filter-branch'和'git merge'組合來拆分這些目錄,但是如果不知道你想保留什麼或者你想要最終的存儲庫看什麼喜歡。 – simont 2012-03-02 15:52:08