【问题标题】:Joining two GIT repositories into one using SourceTree使用 SourceTree 将两个 GIT 存储库合并为一个
【发布时间】:2015-10-11 20:17:01
【问题描述】:

我开发的每个 Arduino 项目都有单独的 GIT 存储库,我使用 SourceTree 处理这些项目,连接到 Bitbucket 中的远程存储库。

我想知道如何将这些存储库合并为一个并保存每个文件的历史更改。

是否可以在 SourceTree 中完成?我还没有通过命令行使用 GIT。

【问题讨论】:

    标签: git join repository bitbucket atlassian-sourcetree


    【解决方案1】:

    您可以在 BitBucket 中创建一个新的 git 存储库,克隆它并将您现有的两个 bitbucket 存储库添加为这个新存储库的 submodules

    使用 Sourcetree(自 2012 年及其 1.3 版本以来),这很容易。

    然后系统会提示您提供用于克隆内容的源 URL,以及该子模块将驻留的当前存储库中的路径。

    一旦您对这些子模块中的任何一个进行了更改,您就可以推送所有内容(子模块,还有记录 gitlinksspecial entries in the index 的父 repo)

    (此屏幕截图适用于 mercurial 存储库,但适用于 git 存储库)


    另一种选择是git subtreeillustrated herediffers from submodule

    即使git-subtree.sh add --prefix /url/to/repo.git master --squash 将通过将 vim-surround 存储库的整个历史压缩为一个来记录合并提交,subtree push 仍会将 bash 附加历史记录推送到您的原始子树存储库,保留并完成其历史。

    【讨论】:

    • 我已经尝试过你的建议,但我不知道它是否是我想要的。我为我的每个 arduino/electronic 项目创建了不同的文件夹和存储库。现在我发现我有太多的项目,并且必须为每个新项目创建一个单独的存储库是很痛苦的,所以我想将它们全部加入一个名为“电子项目”的新存储库。有什么建议吗?
    • @Serge 然后你可以查看我在stackoverflow.com/a/24709789/6309 中说明的 git substree (developer.atlassian.com/blog/2015/05/the-power-of-git-subtree)。它不同于子模块(stackoverflow.com/a/31770147/6309
    • 我已经尝试过子树,这确实是我需要的。我设法将旧存储库拉入新存储库,但一旦“导入”到新存储库中,就无法保留历史记录。 OLD 存储库文件被拉出并添加到 NEW 存储库,但提交历史记录丢失。任何的想法?奇怪的是,在 sourcetree 中,时间线显示了正确的提交历史,但在 bitbucket 中,文件只显示了一个提交历史。
    • @Serge 但在 bitbucket 中,文件仅显示一个提交历史记录:blogs.atlassian.com/2013/05/… 如果您使用过 --squash,这听起来合乎逻辑。 BitBucket 仍将引用远程子树 url 存储库,但您自己的存储库只会看到合并提交压缩历史记录。
    • @Serge 尽管如此,子树推送仍会将 bash 附加历史记录推送到您的原始子树存储库,保留并完成其历史记录。我已经在这个意义上编辑了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2010-11-28
    相关资源
    最近更新 更多