假设我有一个这样的设置
phd/code/
phd/figures/
phd/thesis/
由于历史原因,这些都有自己的git存储库。但是我想把它们合并成一个,这样可以简化一些。例如,现在我可能要做两组更改,并且必须做一些类似的事情
cd phd/code
git commit
cd ../figures
git commit
(现在)只要能表演就好了
cd phd
git commit
似乎有几种方法可以使用子模块或从我的子存储库中提取,但这比我想要的要复杂一些。至少让我满意的
cd phd
git init
git add [[everything that's already in my other repositories]]
但这似乎不是一句俏皮话。git中有什么可以帮助我的吗?
合并mainProject中的secondProject:
A)在第二个项目中
git fast-export --all --date-order > /tmp/secondProjectExport
B)在主项目中:
git checkout -b secondProject
git fast-import --force < /tmp/secondProjectExport
在这个分支中完成你需要做的所有繁重的转换并提交它们。
C)然后回到主分支和两个分支之间的经典合并:
git checkout master
git merge secondProject
git-filter-branch解决方案工作得很好,但请注意,如果你的git repo来自SVN导入,它可能会失败,并发出如下消息:
Rewrite 422a38a0e9d2c61098b98e6c56213ac83b7bacc2 (1/42)mv: cannot stat `/home/.../wikis/nodows/.git-rewrite/t/../index.new': No such file or directory
在这种情况下,你需要从过滤器分支中排除最初的修订——即将最后的HEAD更改为[SHA of second revision]。头部-见:
http://www.git.code-experiments.com/blog/2010/03/merging-git-repositories.html
合并mainProject中的secondProject:
A)在第二个项目中
git fast-export --all --date-order > /tmp/secondProjectExport
B)在主项目中:
git checkout -b secondProject
git fast-import --force < /tmp/secondProjectExport
在这个分支中完成你需要做的所有繁重的转换并提交它们。
C)然后回到主分支和两个分支之间的经典合并:
git checkout master
git merge secondProject