如何简洁记录嵌套Git子模块的修改?
最优方案:Git补丁(Git patches)
直接排除前两个方案:
- 两次Fork:完全踩中你想避免的痛点,要维护两个额外的Fork仓库,后续上游更新还要同步,纯纯给自己加负担,直接pass。
- 构建脚本替换:修改是临时生效的,本地仓库里没有Git层面的修改记录,团队其他人拉取代码还要同步你的脚本,万一子模块B上游更新,脚本大概率失效,后续维护成本反而不低。
Git补丁是最符合你需求的方案,步骤简单,还能在本地仓库完整记录修改:
- 进入子模块B的目录:
cd path/to/submodule/A/B - 完成那一行代码的修改,提交到B的本地仓库:
git add 你修改的文件名.ext git commit -m "Fix: 一行代码的微小调整" - 生成补丁文件,放到父仓库的补丁目录(方便管理):
# 先在父仓库创建patches文件夹 mkdir -p ../../patches git format-patch HEAD~1 --stdout > ../../patches/b-tiny-fix.patch - 回到父仓库,把补丁文件加入版本控制:
cd ../../ git add patches/b-tiny-fix.patch git commit -m "添加子模块B的微小修改补丁"
后续团队成员拉取仓库后,只需要进入子模块B目录,执行git apply ../../../patches/b-tiny-fix.patch就能应用修改;如果子模块B上游有更新,你可以先同步B的最新代码,重新打补丁(有冲突的话解决后更新补丁文件即可),比脚本替换灵活太多。
这种方式不需要Fork任何仓库,所有修改都通过补丁文件在本地仓库留痕,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Kiwewi
相关产品推荐
相关产品推荐

