jas*_*p85 12 git version-control open-source git-subtree
总之,我想"叉"另一个项目的子目录(不在我的控制),以一个新的存储库的顶层,并增强在该子目录中的代码,同时保留变动合并从子目录中的能力上游项目.
我一直在读这个话题一段时间,但找不到我的情况的确定答案.git subtree分解为这些情况的大多数用法:
git subtree add这些用例不适用于我:我不会忘记忘记,而且我不拥有此fork的两面,所以git subtree add流程不适用.
所以我们假设原始模块存在于contrib/foo主项目中.我目前的想法是:
git subtree split -P contrib/foo -b upstream_vx.y创建一个新的历史,"笼"子目录到一个存储库的顶层master从我的项目创建一个分支,从这一点开始增强upstream_vx.y运行继续更新git subtree splitupstream_vx.y到我的master这对我来说并不像"git-like".具体来说,我基本上创建了上游项目子目录的并行历史记录,并为每个主要上游分支维护我自己的"提升"分支(更不用说能够引用上游标记).
有没有更好的方法来解决这个问题?
我想我一直在和你保持类似的情况。我有一个具有模块的主项目(ProjA),并且正在将第二个项目(ProjB)的子树添加到主项目的模块中。为此,我维护了一个ProjB副本。
分割ProjB:
cd ProjB
git checkout -b split-maint
git subtree split --prefix=important/dir --branch=module-for-A
Run Code Online (Sandbox Code Playgroud)
将子树添加到ProjA:
cd ProjA
git remote add ProjB_remote /path/to/ProjB
git fetch ProjB_remote
git subtree add --prefix=modules/projB_mod ProjB_remote/module-for-A --message="commit message"
Run Code Online (Sandbox Code Playgroud)
然后要更新/维护,请重新分割原稿(如上所述)。这里的关键是git subtree split是可重复的,并且以前拆分的每个修订版的SHA都相同。
使用新的详细信息更新ProjA:
cd ProjA
git fetch ProjB_remote
git subtree merge --prefix=modules/projB_mod ProjB_remote/module-for-A --message="commit message"
Run Code Online (Sandbox Code Playgroud)
从技术上讲,我的操作略有不同,因为我的ProjB有很多提交,并且拆分实际上需要一个小时才能运行。如果您需要,我也可以为您提供有关如何帮助的详细信息。(只需评论,我将更新此答案)。
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |