2012-05-19 39 views
9

我目前正在使用我自己的神經影像工具箱,該工具箱在MATLAB/SPM8下運行,而且我的存儲庫中的大多數程序文件都是MATLAB *.m文件。我有不同的功能分支和一個analysis分支,用於使用當前版本進行分析。同時我正在開發master和功能分支中的代碼,然後不斷合併到master分支。如何使用git同時處理幾個不同版本的文件?

現在的問題是,我在analysis分公司運行分析,採取了很多的時間(甚至數天),並在這段時間裏,我無法git checkout mastergit checkout new-feature。這嚴重限制了我的生產力。

因此,因爲不可能同時同時打開多個分支,所以我想將analysis分支從開發存儲庫移出到它自己的存儲庫。問題是,如果我git init基於當前analysis分支的新存儲庫,是否有某種方式不知何故git merge從當前master分支(開發存儲庫的分支)能夠​​使用我開發的新開發的代碼新的分析庫中的倉庫?

+3

其實,你可以* *保持幾個分支開在同時在同一時間:混帳上兩個分支同時工作(http://stackoverflow.com/questions/2048470/git-working在兩個分支同時) – sleske

回答

8

如果git clone你現有的存儲庫到一個新的存儲庫,然後你可以git pushgit fetch從一個到另一個來匹配裁判(支部)你已經改變;不涉及合併。存儲庫的內容將自動硬鏈接以節省磁盤空間。

如果使用--mirror選項git clonegit push,你將省去由遠程跟蹤分支,只是有兩個相同的分支,這是更簡單,更對稱,但少了以往使用git的。爲了最大限度地「遵循教程」的簡單性,應該安排第三個「中央」存儲庫(應創建--bare),這兩個工作存儲庫都是克隆的。

應該要求沒有合併(除了「快進合併」,它們並不真正合並,而是用新的分支頭替換舊的分支頭),因爲您正在使用相同的分支;你只需要兩份。當您的分析完成並且您能夠更新分析分支時,只需git merge --ff-only masteranalysis;您可以在任何方便的存儲庫中執行此操作,但不要忘記將更改與git push other-repository同步。


另一種選擇(因爲GIT中版本2.5)是git worktree命令,它允許多個獨立工作的樹木中,你可以git checkout等,獨立。這與上面的製作克隆選項的區別在於,這裏只有一組分支

但是(截至2.8版本),這仍然被認爲是「實驗性」功能,我沒有親自用它來評論它的可靠性和實用性。

+0

這似乎是一個好主意。如果我'git clone'我的倉庫(不帶'--mirror',因爲我使用Dropbox作爲一個私人的遠程跟蹤倉庫,正如解釋[例如這裏](http://michael.otacoo.com/linux-2/設置一個git-server-with-dropbox /)),我還可以創建新的分支並同步它們嗎?如果我創建了一個新的功能分支,我應該在我的'original'版本庫和新的''分析'版本庫中創建它,並使用相同的名稱嗎?或者,如果我總是隻將'original'版本庫的'master'分支合併到新的'analytics'版本庫,那麼僅僅在'original'版本庫中創建它就足夠了? – nrz

+1

如果您對'analysis'分支做的唯一一件事是從'master'合併到'analysis',那麼是的,那麼這個分支不需要生活在分析存儲庫以外的任何地方。事實上,它不需要是一個獨立分支的分支:它只是該存儲庫中唯一的一個分支,「origin/master」作爲上游分支。你對它做的每一次合併都應該是快進的。 –

+0

謝謝,這可以幫助我很多。 – nrz

2

作爲凱文瑞德解釋的克隆回購的替代方案,您也可以使用git-new-workdir爲您的回購創建第二個工作副本。這樣,兩個工作副本將始終自動看到相同的分支,因爲它們共享一個git回購。

克隆回購的優勢在於不需要任何手動同步/合併。在workdir A中提交的那一刻,提交將在workdir B中可見(例如git log)。

唯一需要注意的是:當您更改存儲庫(提交,重新綁定,重置分支等)時,您不應該在其他workdir中檢出同一分支,否則git會有點困惑(請參閱git-new-workdir: Commit in working tree A causes bogus changes in tree B)。

參見:git working on two branches simultaneously

相關問題