git合并不同的存储库?

Posted

技术标签:

【中文标题】git合并不同的存储库?【英文标题】:git merge different repositories? 【发布时间】:2011-02-26 08:14:32 【问题描述】:

我的所有项目都使用 SVN。 有时项目 B 源自项目 A 的副本。 当项目 A 发生一般更改时,我可以在目录 B 中使用 svn merge A,它会合并这些更改。

现在,如果我想使用 git。我不喜欢将我的所有项目都放在同一个存储库中,因为我必须克隆 everything 并且不能像在 SVN 中那样只选择一个项目。 但是对于每个项目都有一个存储库,我该如何像之前使用 SVN 那样做呢?

问题是: 如果我想要几个真正与一个原始项目相关的子项目并保持它们同步,那么构建它的最佳方式是什么?而且我还希望能够单独检查它们

【问题讨论】:

你最好看看 git-submodule (kernel.org/pub/software/scm/git/docs/git-submodule.html)。 @Jefromi 但源文件基本上来自相同的历史,这是否意味着我有两个文件副本?我认为子模块更多地用于跟踪您作为单独文件(而不是合并)包含的外部库? 没关系,我没有看到您说 B 是 A 的副本。阅读您的“问题是”,您说“子项目......与一个原始项目有关......同步”我以为你的意思是取出原始项目的大部分内容,但在元项目中保持它们同步。 【参考方案1】:

如果您有两个项目,proj1proj2,并且想要将 proj1 的更改合并到 proj2,您可以这样做:

# in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge

我相信这与您对 SVN 所做的事情相同。

【讨论】:

但是合并变更#2 会跟踪我们已经合并变更#1 这样做吗?如果我记得正确,每次添加新更改时,我都必须重新合并所有更改(并纠正冲突)。这不是 SVN 方式发生的 当然,合并照常工作。您不必“重新合并所有更改”。这只不过是通常的合并,即您将与远程服务器一起使用的合并。 @LeoHolanda 就 git 而言,本地文件算作远程文件。 @LeoHolanda 你说得对。我必须以 URL 格式表示本地 repo,例如 file:///Users/abc/path/to/my/repo/.git 我建议在合并中使用 --allow-unrelated-histories 标志以允许不共享共同祖先的合并历史记录 (git-scm.com/docs/git-merge)。

以上是关于git合并不同的存储库?的主要内容,如果未能解决你的问题,请参考以下文章

如何合并两个 Git 存储库?

如何将多个 Git 存储库合并为一个并交错历史

Git合并了两个不同的故事

在两个 git 存储库之间合并? [复制]

合并两个 Git 存储库而不破坏文件历史记录

将 git repo 分支(具有不同的历史记录)合并到主分支 [重复]