【发布时间】:2011-03-25 17:43:19
【问题描述】:
这可能吗?想象一下,我有项目 Parent & Child。两者都是 git 存储库。 Child 是 Parent 的子模块。
我可以像常规存储库一样编辑 Parent 中的 Child 版本并提交和推送它们吗?
或者我是否需要在某个地方单独克隆 Child 以进行更改?
谢谢。
【问题讨论】:
标签: git git-submodules
这可能吗?想象一下,我有项目 Parent & Child。两者都是 git 存储库。 Child 是 Parent 的子模块。
我可以像常规存储库一样编辑 Parent 中的 Child 版本并提交和推送它们吗?
或者我是否需要在某个地方单独克隆 Child 以进行更改?
谢谢。
【问题讨论】:
标签: git git-submodules
您不需要单独的克隆。子模块文件夹是它自己的世界。只需编辑、提交、分支和推送即可。
Git 在这方面很棒。 :-)
顺便说一句,父存储库甚至会检测到子模块文件夹内何时发生更改,并为您提供提交子模块的当前状态作为父存储库克隆的新官方参考点。
重要提示:
确保在开始破解之前在子模块文件夹中执行git checkout master(或其他一些分支)。
然后还要确保当您提交子模块的更新状态时,您要么push 将这些提交提交到公共仓库,或者至少您没有变基或以其他方式更改子模块内的历史记录之后的模块 - 因为这会破坏父模块对子模块历史记录的引用。
小心行事。 (帽子提示@pjmorse 提醒。)
底线:
是的。在子模块文件夹中开发是可能的,而且通常很方便,但并非没有风险。明智地选择您的开发模式
【讨论】:
如果您想在子模块中进行更改,您应该首先签出分支,进行更改,在子模块中发布更改,然后更新超级项目以引用新的提交。
据我所知,如果您正在处理添加子模块的分支,您可以编辑 Child 并将其推送回其存储库。但是,如果您不是将 Child 添加到 Parent 的开发人员,那么您正在使用分离的头,并且需要检查 Child 的单独版本以进行更改,或者进行更改并导出补丁(使用 @987654322 @) 让其他人提交(通过git am)。
【讨论】: