2012-02-12 39 views
5

我終於將我們的CVS倉庫遷移到git。不幸的是,我們沒有在CVS中使用分支,但不同的版本/分支被分成不同的子目錄。將git倉庫中的文件夾拆分爲不同的分支

I.E.我們有以下的目錄結構:

/root 
    /lib 
    /tools 
    /src 
     /v1.0 
     /v2.0 
     /v3.5 

有沒有辦法在SRC子目錄中的3個版本分爲單獨的分支,而不是保存目錄爲每個版本?

我在堆棧溢出Question 4877053上發現了同樣的問題,在這裏提議使用git-subtree,但即使閱讀了git-subtree的手冊,我也不知道如何使用它來解決我的問題。

有人能給我一個更詳細的解釋甚至是另一種解決方案嗎?

我是很新的Git,也許這就是爲什麼我不明白的子樹手動;-)

非常感謝您的所有anwers!

+0

您是否有與不同版本目錄相關的提交歷史記錄?當您將CVS回購遷移到git時,您現在有沒有想保留的歷史記錄?我敢肯定,你可以使用'git filter-branch'和'git merge'組合來拆分這些目錄,但是如果不知道你想保留什麼或者你想要最終的存儲庫看什麼喜歡。 – simont 2012-03-02 15:52:08

回答

3

這取決於你想要在倉庫中剩下的東西。

如果你想三個分支,v1.0v2.0v3.5,所有的結構是這樣的:

/root 
    /lib 
    /tools 
    /src 

然後是的,我敢肯定,你可以做到這一點。

-- A -- B -- Current 
       | 
       |--- v1.0 
       |--- v2.0 
       |--- v3.5 

ABCurrent幸福,因爲你遷移到Git修訂已經提交,並在v1.0v2.0v3.5基本上都是「死了:你會在分支結構方面有這樣的事情結束了結束「分支。你可以做一些花哨的東西,如果你想獲得一個分支結構更像是:

-- v1.0 --- v2.0 --- v3.5 -- A -- B -- Current 

也就是說,獨立v1.0v2.0,並v3.5到自己的分支機構,然後重訂v1.0v2.0v2.0v3.5,和v3.5到當前版本的第一次提交。

但我不確定你想要做什麼。


有沒有辦法在SRC子目錄中的3個版本分爲單獨的分支,而不是保存目錄爲每個版本?

是的,我敢肯定你可以做到這一點。我的方法論有點......錯綜複雜,我承認,但是在這裏。 ,小心,閱讀手冊頁 - 以下命令可能不會搞砸一切,但使用風險自負。

  1. git checkout -b v1.0 - 進入一個新的分支。
  2. 刪除除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在它自己的分支。好極了!

  3. 重複執行v2.0v3.5

恐怕我不能看到這樣做,除了給你......「奇怪的」歷史。據推測v2.0基本上具有v1.0 +改進;我上面列出的結構(三個「死衚衕」分支)顯示v2.0v3.5不建立在以前的版本上。我不完全相信你有什麼樣的歷史,如果這是一個問題,等等等等

因爲你必須有v1.0v2.0v3.5在自己的小樹枝,你可以git merge他們或git rebase等等等等,如果你更喜歡更美觀的歷史。

希望這給你一點點思考;就像我說的,請閱讀手冊頁。 :)

相關問題