git合并不同的存储库?


79

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

现在,如果我想使用git。我不喜欢将所有项目都放在同一个存储库中,因为那样我就不得不克隆所有内容,而不能像SVN中那样仅选择一个项目。但是,每个项目只有一个存储库,我该如何像之前使用SVN一样做同样的事情?

问题是: 如果要几个确实与一个原始项目相关的子项目并使它们保持同步,什么是构造它的最佳方法?而且我也希望能够单独检查它们



@Jefromi但源文件基本上都来自相同的历史记录,这是否意味着我有文件的两个副本?我认为子模块更多地用于跟踪作为单独文件(而非合并)包含的外部库?
baloo 2010年

没关系,我没看到您说B是A的副本。在读“问题是”时,您说“子项目...与一个原始项目有关...正在同步”,我以为您打算删除原始项目的大部分内容,但在元项目中保持同步。
卡斯卡贝尔

Answers:


140

如果你有两个项目,proj1proj2和要合并的变化proj1proj2,你会做这样的:

# 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方式发生的
-baloo

当然,合并照常进行。您不必“重新合并所有更改”。这仅是通常的合并,您将在远程服务器上使用的合并。
Olivier Verdier

如果我没有遥控器怎么办?我想做同样的事情(将projA合并到projB中),但是我只在本地工作,没有遥控器。
L. Holanda 2015年

1
就git而言,@LeoHolanda本地文件算为远程文件。
PyRulez

3
@LeoHolanda你在这里有意思。我必须以URL格式表示本地存储库,例如file:///Users/abc/path/to/my/repo/.git
mcku
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.