2010-06-01 218 views
65

我一直在为我所有的项目使用SVN。 有时项目B源自项目A的副本。 当项目A有一个通用更改时,我可以在目录B中使用svn merge A,它将合并这些更改。git合并不同的存储库?

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

的问题是: 什么是结构,如果我想要多个子项目,真正所有涉及到一个原始的项目,并保持同步的最佳方式?而且,我也希望能够检查出来单独

+1

你最好看看git-submodule(http://www.kernel.org/pub/software/scm/git/docs/git-submodule.html)。 – Cascabel 2010-06-01 12:53:22

+0

@Jefromi但源文件基本上来自相同的历史,这将意味着我有两个副本的文件?我认为子模块更多用于跟踪外部库,将其作为独立文件包含(不合并)? – baloo 2010-06-01 13:56:01

+0

没关系,我没有看到你说B是副本A.读你的“问题是”,你在哪里说“子项目...涉及到一个原始项目......同步”我认为你的意思是取出原始项目的块,但保持它们在元项目中同步。 – Cascabel 2010-06-01 21:51:26

回答

113

如果你有两个项目,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中所做的一样。

+0

但是将这样合并的改变#2轨道合并了改变#1吗? 如果我记得正确,每次添加新更改时,我都必须重新合并所有更改(并纠正冲突)以进行所有更改。这并没有发生SVN方式 – baloo 2010-06-01 13:50:52

+0

当然,合并工作照常。您不必“重新整理所有更改”。这只不过是通常的合并,你可以使用远程服务器。 – 2010-06-01 14:12:50

+0

如果我没有遥控器怎么办?我想做同样的事情(将projA合并到projB中),但我只在本地工作而没有远程控制。 – 2015-12-23 23:22:59