这是可行的吗?想象一下,我有两个项目 Parent 和 Child,它们都是 Git 仓库。Child 是 Parent 的子模块。
我能否编辑 Parent 中的 Child 版本,就像普通仓库一样提交和推送更改?
还是我需要在其他地方单独克隆 Child 并进行更改?
谢谢。
这是可行的吗?想象一下,我有两个项目 Parent 和 Child,它们都是 Git 仓库。Child 是 Parent 的子模块。
我能否编辑 Parent 中的 Child 版本,就像普通仓库一样提交和推送更改?
还是我需要在其他地方单独克隆 Child 并进行更改?
谢谢。
你不需要单独克隆。子模块文件夹是一个独立的世界。只需编辑、提交、分支和推送,尽情发挥。
Git非常强大。 :-)
顺便说一下,父存储库甚至会检测到子模块文件夹内部发生更改,并提供让你将子模块的当前状态作为新的官方参考点进行提交,以供父存储库的派生版本使用。
重要提示:
在开始修改之前,请确保在子模块文件夹中执行git checkout master
(或其他分支)命令。
然后,在提交更新后的子模块状态时,请确保你要么将这些提交push
到公共资源库,要么至少不要在之后的操作中对子模块历史进行变基或其他更改 - 否则可能损坏父存储库对子模块历史的引用。
请小心操作。(感谢@pjmorse的提醒。)
底线:
是的。在子模块文件夹内开发是可能的,通常也很方便,但并非没有风险。智慧地选择你的开发模式。
据我所知,如果您正在子模块添加的分支上工作,则可以编辑Child并将其推回其存储库。但是,如果您不是将Child添加到Parent的开发人员,则会使用分离的头部进行工作,并且需要检出Child的单独版本来进行更改,或者制作更改并导出补丁(使用如果您想在子模块中进行更改,应首先检出一个分支,进行更改,发布子模块中的更改,然后更新超级项目以引用新提交。
git format-patch
),供其他人通过git am
提交。