2011-08-02 89 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会合并它们(如果你愿意的话,你可以将它们移动到其他位置),如果它们不同,它只会给你们两个,你必须选择(而不是尝试合并他们会有冲突,所以不跟踪文件身份不会丢失任何东西)。