合并不同的git代码库?

85

我一直在使用SVN来管理我的所有项目。有时,项目B是从项目A复制而来的。 当项目A发生通用变化时,我可以在目录B中使用svn merge A来合并这些变化。

现在,如果我想使用git。我不喜欢将所有项目都放在同一个仓库中,因为我随后必须克隆所有项目,无法像在SVN中那样选择一个项目。 但是,如果每个项目都有一个仓库,那么如何像之前在SVN中那样做呢?

问题是: 如果我想要几个子项目,这些子项目与一个原始项目相关联,并保持同步,同时也希望能够单独检出它们,最好的结构方式是什么?


1
你最好查看一下 git-submodule(http://www.kernel.org/pub/software/scm/git/docs/git-submodule.html)。 - Cascabel
@Jefromi 但源文件基本上来自同一个历史记录,这意味着我有两份文件副本?我认为子模块更适合跟踪包含为单独文件的外部库(而不是合并)? - baloo
没关系,我没有看到你说B是A的副本。在你的“问题是”中,你说“子项目...与一个原始项目相关...同步”,我以为你的意思是取出那个原始项目的一部分,但在元项目中保持同步。 - Cascabel
1个回答

156

如果你有两个项目,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所做的事情是相同的。


如果我没有远程,该怎么办?我想做同样的事情(将projA合并到projB中),但我只在本地工作,没有远程。 - L. Holanda
2
@LeoHolanda 对于 Git 来说,本地文件与远程文件一样。 - PyRulez
4
@LeoHolanda 您说得对。我必须以URL格式指示本地存储库,例如file:///Users/abc/path/to/my/repo/.git。 - mcku
3
建议在合并时使用--allow-unrelated-histories标志,以允许合并两个没有共同祖先的提交历史(https://git-scm.com/docs/git-merge)。 - Dariusz Woźniak
3
远程可以只是路径:git remote add r1 ../r1。不建议使用 --allow-unrelated-histories,自从 git >= 2.9 版本以来,合并来自不同仓库的分支需要该选项 必须 - x-yuri
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接