git merge different repositories?
我在所有项目中都使用了SVN。有时项目B是作为项目A的副本而发起的。当项目A发生一般性更改时,我可以在目录B中使用svn merge A,它将合并这些更改。
现在,如果我想使用git。我不喜欢把我所有的项目都放在同一个存储库中,因为那时我必须克隆所有的东西,并且不能像SVN那样只选择一个项目。但是对于每个项目都有一个存储库,我该如何像以前使用SVN那样做呢?
问题是:如果我想要几个真正与一个原始项目相关并保持同步的子项目,那么构建它的最佳方法是什么?我也希望能单独检查一下
- 您最好看看git子模块(kernel.org/pub/software/scm/git/docs/git submodule.html)。
- @jefromi但是源文件基本上来自同一个历史,这意味着我有两个文件副本?我认为子模块更适合跟踪作为单独文件(而不是合并)包含的外部库?
- 没关系,我没看到你说B是A的副本。阅读你的"问题是",你说"子项目……与一个原始项目相关……同步",我假设你是想从原始项目中取出一大块,但在元项目中保持同步。
如果您有两个项目,即proj1和proj2并希望将proj1的更改合并到proj2中,您可以这样做:
1 2 3 4
| # in proj2:
git remote add proj1 path/to/proj1
git fetch proj1
git merge proj1/master # or whichever branch you want to merge |
我相信这和你用SVN做的一样。
- 但是合并变更会不会是我们已经合并的变更1的2个轨道呢?如果我记得正确的话,每次添加新的更改时,我都必须重新合并所有更改(并纠正冲突)。这不是SVN的方式
- 当然,合并和往常一样工作。您不必"重新计算所有更改"。这只不过是通常的合并,即与远程服务器一起使用的合并。
- 如果我没有遥控器怎么办?我想做同样的事情(将Proja合并到Projb中),但是我只在本地工作,没有远程设备。
- @就Git而言,leoholanda本地文件算为远程文件。
- @你说得对。我必须以url格式表示本地repo,例如file:///users/abc/path/to/my/repo/.git。