我已经与git submodules
合作了很长时间,我对它感到高兴。另一方面,我的同事一直在抱怨它(互联网上的很多人似乎也讨厌git submodule
),我的主管决定改为git subtree
。
我(与我的主管一起)维护一个项目,其中包含submodules
个git subtree
。每个子模块本身都是一个独立的项目,并且是为我们公司的不同项目开发的。我们的软件对这些模块有不同的依赖关系,为了帮助部署,我们创建了这个包含这4个子模块的项目。
现在我的主管创建了一个新的分支,在那里他摆脱了子模块并使用mod1
添加了它们。这个前sobmodules之一的独立回购(让我们说 D--E--F dev_feature_X
/
A--B--C master
)看起来像这样
独立回购
dev_feature_X
我的主管在mod1
添加git subtree
时使用了mod1
。
上周我不得不修复一个功能,我小心翼翼地单独提交。我想将$ git subtree push --prefix=mod1 user@server:mod1 feature_X
的更改推送到独立存储库,以便我执行
mod1
在独立的仓库git fetch
上我创建了一个origin/feature_X
,看到创建了一个新的分支 dev_feature_X
|
v
D--E--F--P--Q--R feature_X
/
A--B--C master
。
origin/feature_X
这个新分支是树的一部分,所以我能够毫无问题地合并它。我删除了mod1
分支,因为我不再需要它,它已经是树的一部分了。
今天我不得不再次对大型仓库进行一些更改,我再次小心地进行单独的提交。一旦我推动了我的更改,我想将$ git subtree push --prefix=mod1 user@server:mod1 feature_X
的更改推送到其独立的回购中。所以我又做了
mod1
在单独的仓库git fetch
上我创建了subtree push
,但现在 dev_feature_X
|
v
D--E--F--P--Q--R A'--B'--C'--...--R'--O feature_X
/
A--B--C master
推了一个新的单独的树
git subtree push
这个新树的提交内容与原始树的提交相同。
我不明白为什么第一次YYYY-MM-DD
只推动了#34;缺失的提交" (P,Q,R)但第二次它推动了一个镜像旧提交的全新树。现在历史已经过去,如果我将R与O合并,我会将O的每次更改都视为冲突。
我错过了什么或做错了吗?我已经阅读了手册页和一些教程,我想我已经理解了如何做到这一点,但似乎无论如何我都做错了。