背景
我想从我的Git仓库中主动创建一个子项目。
目前,我有类似的东西......
A-B-C (origin/master)
我现在看到这个代码库的一个子集对其他类似的项目很有用,所以我分叉并删除了一堆东西。
A-B-C-D (sub-project/master)
其中commit D
删除了一堆特定于original/master
项目的代码。
现在我可以从sub-project/master
...
A-B-C-D-OP1 (other-project/master)
而且,如果我有通用更新(我想要应用于所有其他项目的提交),我可以将它们转到sub-project/master
,然后将它们拉入我所有的其他项目......
A-B-C-D-E (sub-project/master)
A-B-C-D-OP1-E (other-project/master)
我现在要做的是将这些相同的提交从sub-project/master
合并回origin/master
,但我知道这会导致......
A-B-C-D-E (origin/master)
D
从origin/master
删除一堆代码,当我真正想要的是......
A-B-C-E (origin/master)
我的问题
如果我重新定位sub-project/master
,请删除提交D
A-B-C-E (sub-project/rebase-branch)
我知道我可以将sub-project/rebase-branch
合并到original/master
中,以便它看起来也像我想要的那样......
A-B-C-E (origin/master)
但如果我在sub-project
...
A-B-C-E-F (sub-project/rebase-branch)
然后将sub-project/rebase-branch
合并到other-project/master
?
other-project/master
会导致这个......?
A-B-C-D-OP1-E-F (other-project/master)
将D
留在原地?
或者合并会导致这个......?
A-B-C-OP1-E-F (other-project/master)
在添加D
时删除F
?
如果是前者,那么我很高兴。
如果它是后者,那么我是否有一个可行的解决方案来解决我上面提到的困境?
(我是否有可能以这样的方式修改sub-project
,然后我可以将添加到sub-project
的其他提交合并到origin/master
和other-project/master
中 - 离开{{1在后者中就位,但在前者中不存在?)
答案 0 :(得分:1)
由于git具有不可变历史图,当您进行rebase时,只需在不同的基础上重新创建相同的提交。因此,如果您有A-B-C-D-E
的历史记录,则在E
从D
到C
的变身后,您将获得A-B-C-E'
。如果您合并它 - 它将同时包含历史记录E
和E'
。
所以,有可能这样做,但我觉得你正在尝试使用版本控制系统作为依赖管理系统,这不是最好的事情。尝试重新考虑如何使用组件并将它们分成独立的项目。
答案 1 :(得分:0)
听起来你已经找到了一个项目的子集,可以作为一个库生成。您应该使用完全独立的repos维护单独的项目(READ:彼此之间没有设置遥控器)。定期“发布”您的其他项目可以使用的库项目。您可以使用gradle或maven等工具来帮助您管理对库项目的依赖。就个人而言,我认为这比通过合并提交尝试使用git作为依赖管理工具更好。