【问题标题】:Git: Track two branches, when files are located differently on each oneGit:跟踪两个分支,当文件在每个分支上的位置不同时
【发布时间】:2011-10-18 00:34:03
【问题描述】:

假设我在第一个分支上,跟踪“foo”和“bar”文件,如下所示:

my_repository/
            ./foo
            ./bar

我怎样才能跟踪另一个分支(远程),这个 'foo' 和 'bar' 文件位于另一个位置?即,当我签出第二个分支时,my_repository 文件夹变成这样:

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

再解释一下:我有第一个分支跟踪远程存储库,第二个分支跟踪另一个远程存储库。

在某个时候,我在其他地方克隆了第二个存储库,将 foobar 文件添加到 tests 文件夹,并提交了它。

然后,我开始从我的第一个分支,我的官方克隆(原始/主)中提交并更改我的 foobar 文件。现在,我还想将此更改发送到第二个存储库,但不仅仅是覆盖文件的内容。我也想在第二个分支上有提交历史记录。

问题是第二个存储库将我的文件放到了不同的位置。

有什么建议吗?

【问题讨论】:

  • @Jan 是的,并且不像您的答案那样工作。我想我可以降低输入的准确性,这样 git 可能会意识到它们是相同的文件,但我认为有更好的方法来做到这一点。

标签: git location git-track


【解决方案1】:

应该没有问题。有两棵树有一些内容。您合并它们并将文件放在合并中的一个或另一个位置并推送该合并。

Git 不跟踪文件身份,但当它进行合并并注意到一侧已修改但另一侧不存在的文件时,它会查找与更改可能有机会应用的足够相似的文件。因此,如果文件相似,git 将合并它们(如果你愿意,你可以将它们移动到另一个位置),如果它们不同,它只会给你两个,你必须选择(但不是试图合并无论如何它们都会发生冲突,因此不跟踪文件身份不会丢失任何东西)。

【讨论】:

    【解决方案2】:

    您似乎正在寻找subtree merge strategy(另请参阅here)。

    【讨论】:

    • 感谢您提供这些信息,真的很有帮助。虽然我通过这样做解决了这个问题:首先,检查第二个分支,然后git merge master,然后git mv 所有文件到第二个分支的正确路径,然后最后一个git commit 说你把所有东西都放在了它需要的地方是。现在我有两个分支,每个分支都知道如何在不同位置跟踪和合并来自同一文件的更改。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多