使用SourceTree将两个GIT存储库合并为一个

使用SourceTree将两个GIT存储库合并为一个,git,join,repository,bitbucket,atlassian-sourcetree,Git,Join,Repository,Bitbucket,Atlassian Sourcetree,对于我开发的每个Arduino项目,我都有单独的GIT存储库,我使用连接到Bitbucket中远程存储库的SourceTree来处理这些项目 我想知道如何将这些存储库合并到一个存储库中,并保存每个文件的历史更改 是否可以在SourceTree中执行此操作?我还没有通过命令行使用GIT。您可以在BitBucket中创建一个新的GIT repo,克隆它并将两个现有的BitBucket repo添加到此新repo的 有了Sourcetree(自2012年及其1.3版以来),就很容易了 然后,系统会提

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

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


是否可以在SourceTree中执行此操作?我还没有通过命令行使用GIT。

您可以在BitBucket中创建一个新的GIT repo,克隆它并将两个现有的BitBucket repo添加到此新repo的

有了Sourcetree(自2012年及其1.3版以来),就很容易了

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

一旦您对这些子模块中的任何一个子模块进行了更改,您就可以推送所有内容(子模块,以及记录的父回购协议)

(此屏幕截图适用于mercurial回购,但适用于git回购)


另一种选择是


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

我尝试过你的建议,但我不知道这是否是我想要的。我为我的每个arduino/electronic项目创建了不同的文件夹和存储库。现在我发现我有太多的项目,为每个新项目创建一个单独的存储库是一件痛苦的事情,所以我想将它们全部加入一个新的存储库,称为“电子项目”。有什么建议吗?@Serge那么您可以查看我在中演示的git substree()。它不同于submodule(),我已经尝试过subtree,实际上这就是我所需要的。我设法将旧存储库拉入新存储库,但无法让它在新存储库中“导入”历史记录。旧的存储库文件会被提取并添加到新的存储库中,但提交历史记录会丢失。有什么想法吗?奇怪的是,在sourcetree中,时间线显示了正确的提交历史记录,但在bitbucket中,文件只显示了一个提交历史记录。@Serge但在bitbucket中,文件只显示了一个提交历史记录:如果使用--squash,这听起来是合乎逻辑的。BitBucket仍将引用远程子树url repo,但您自己的repo只能看到合并的提交挤压历史。@Serge尽管如此,子树推送仍会将bash附加历史推送到原始子树repo,从而保留和完成其历史。我已经在这个意义上编辑了答案。