编辑一个Git子模块

49

这是可行的吗?想象一下,我有两个项目 Parent 和 Child,它们都是 Git 仓库。Child 是 Parent 的子模块。

我能否编辑 Parent 中的 Child 版本,就像普通仓库一样提交和推送更改?

还是我需要在其他地方单独克隆 Child 并进行更改?

谢谢。


请参见https://dev59.com/mXI-5IYBdhLWcg3wMFMf#1979194。 - VonC
2个回答

47

你不需要单独克隆。子模块文件夹是一个独立的世界。只需编辑、提交、分支和推送,尽情发挥。

Git非常强大。 :-)

顺便说一下,父存储库甚至会检测到子模块文件夹内部发生更改,并提供让你将子模块的当前状态作为新的官方参考点进行提交,以供父存储库的派生版本使用。

重要提示:

在开始修改之前,请确保在子模块文件夹中执行git checkout master(或其他分支)命令。

然后,在提交更新后的子模块状态时,请确保你要么将这些提交push到公共资源库,要么至少不要在之后的操作中对子模块历史进行变基或其他更改 - 否则可能损坏父存储库对子模块历史的引用。

请小心操作。(感谢@pjmorse的提醒。)

底线:

是的。在子模块文件夹内开发是可能的,通常也很方便,但并非没有风险。智慧地选择你的开发模式。


1
在进行检出之前,+1。此外,在切换分支或在父级中进行其他工作之前,请确保您拥有一个干净的子存储库(其中包含任何已提交的更改)。 - Walter Mundt
在日常的父级仓库工作中,我没有遇到未提交更改的子模块问题(编辑、提交、拉取、推送)。但是,切换分支和子模块更新操作可能会有风险。这是个好观点! - Már Örlygsson
在克隆中开发并不是一个坏主意,这样可以减少因分离 HEAD 而意外提交的机会。当然,您也可以使用钩子来检查自己。 - Cascabel

8
根据文档

如果您想在子模块中进行更改,应首先检出一个分支,进行更改,发布子模块中的更改,然后更新超级项目以引用新提交。

据我所知,如果您正在子模块添加的分支上工作,则可以编辑Child并将其推回其存储库。但是,如果您不是将Child添加到Parent的开发人员,则会使用分离的头部进行工作,并且需要检出Child的单独版本来进行更改,或者制作更改并导出补丁(使用git format-patch),供其他人通过git am提交。

“master” 可能是你要检出的分支。但你说得很对! - Már Örlygsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接