2011-08-02 63 views
0

鑑於我在第一個分支,跟蹤「富」和「酒吧」的文件,像這樣:混帳:跟蹤兩個分支,當文件位於不同的每一個

my_repository/ 
      ./foo 
      ./bar 

我怎麼可能還跟蹤另一個分支(遠程),這個'foo'和'bar'文件位於另一個位置?即,當我結帳這個第二支,my_repository文件夾變成這樣的事情:

my_repository/ 
      ./some_file 
      ./another_file 
      ./tests/ 
       ../foo 
       ../bar 

解釋多一點:我首支跟蹤遠程倉庫,和第二分支跟蹤另一個遠程倉庫。

在某些情況下,我克隆了某處的第二個存儲庫 - 否則,將foobar文件添加到tests文件夾中,並提交它。

然後,我開始提交併更改我的第一個分支foobar文件,我的官方克隆(origin/master)。現在,我想將這些更改發送到第二個存儲庫,但不僅僅是覆蓋文件的內容。我想在第二個分支上也有提交歷史記錄。

問題是,這第二個存儲庫將我的文件放到不同的位置。

任何提示?

+0

你*先試過*嗎? –

+0

@Jan是的,並沒有像你的答案一樣工作。我想我可以減少輸入的準確性,這樣git可能意識到它們是相同的文件,但我認爲有更好的方法來做到這一點。 –

回答

1

看起來您正在尋找subtree merge strategy(另請參閱here)。

+0

感謝您提供這些信息,真的很有幫助。雖然我通過這樣做來解決這個問題:首先,checkout第二個分支,然後'git merge master',然後'git mv'將所有文件轉移到第二個分支的正確路徑,然後做最後一個'git commit'來表示你放置了所有東西它需要的地方。現在我有兩個分支,每個分支都知道如何跟蹤和合並來自同一文件的不同位置的更改。 :) –

0

應該沒有問題。有兩棵樹有一些內容。您合併它們並將這些文件放在合併中的一個或另一個位置,然後推送合併。

Git沒有跟蹤文件標識,但是當它進行合併並發現一個文件被修改而另一個文件不存在時,它會查找具有足夠相似性的文件,以便更改可能有機會應用。所以如果這些文件是相似的,那麼git會合並它們(如果你願意的話,你可以將它們移動到其他位置),如果它們不同,它只會給你們兩個,你必須選擇(而不是嘗試合併他們會有衝突,所以不跟蹤文件身份不會丟失任何東西)。