子目录到独立存储库,然后合并回主存储库

时间:2015-06-08 08:27:23

标签: git merge subtree

我想从现有git存储库的子目录中创建独立的存储库,然后能够将其合并回主存储库。基本上我想分离一个单片git存储库的一个子目录以进行特定的工作,并能够将提交合并回整体仓库。

我尝试过的是拆分子树:

% git subtree split -P project_a/directory_a -b directory_a_branch

然后我可以将directory_a_branch克隆到单独的存储库中并开始处理它:

% git clone -b directory_a_branch --single-branch file:///path/to/main_repo

稍后我可以将更改推回主存储库(在directory_a_branch下) - 一切正常并且现在正在本书中。

问题从我合并directory_a_branch的策略开始,由于我显然无法完全理解我正在做什么,因此失败了。

我从Pro Git书中读到了“Subtree Merging”:https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging并尝试过:

% git read-tree --prefix=project_a/directory_a -u directory_a_branch
error: Entry 'project_a/directory_a/README' overlaps with 'project_a/directory_a/README'.  Cannot bind.

这里讨论了类似的问题:git: merging a subtree from one branch to another,但对我来说缺乏足够的答案。

创建子树分支不是我的意图,这个问题可能会以其他方式解决。也许有子模块?

我的意图是,一个存储库就像是另一个存储库的子存储库,并且将工作重新合并到主存储库将尽可能简单,因为两个存储库共享相同的文件。

用Git解决这个任务是否有可能没有丑陋的黑客攻击?

2 个答案:

答案 0 :(得分:0)

本文介绍了解决此问题的一种方法(可填写特定用例):https://lostechies.com/johnteague/2014/04/04/using-git-subtrees-to-split-a-repository/

基本上你从master(& commit)中删除project_a/directory_a,然后从(remote)分支中删除subtree add --prefix,如下所示:

git subtree add --prefix=project_a/directory_a remote branch

但这不是100%,因为有更好的方法来解决这个问题。

答案 1 :(得分:0)

解决这个问题的单线:

 git merge -s subtree directory_a_branch master