【问题标题】:Editing a git submodule编辑 git 子模块
【发布时间】:2011-03-25 17:43:19
【问题描述】:

这可能吗?想象一下,我有项目 Parent & Child。两者都是 git 存储库。 Child 是 Parent 的子模块。

我可以像常规存储库一样编辑 Parent 中的 Child 版本并提交和推送它们吗?

或者我是否需要在某个地方单独克隆 Child 以进行更改?

谢谢。

【问题讨论】:

标签: git git-submodules


【解决方案1】:

您不需要单独的克隆。子模块文件夹是它自己的世界。只需编辑、提交、分支和推送即可。

Git 在这方面很棒。 :-)

顺便说一句,父存储库甚至会检测到子模块文件夹内何时发生更改,并为您提供提交子模块的当前状态作为父存储库克隆的新官方参考点。

重要提示:

确保在开始破解之前在子模块文件夹中执行git checkout master(或其他一些分支)。

然后还要确保当您提交子模块的更新状态时,您要么push 将这些提交提交到公共仓库,或者至少您没有变基或以其他方式更改子模块内的历史记录之后的模块 - 因为这会破坏父模块对子模块历史记录的引用。

小心行事。 (帽子提示@pjmorse 提醒。)

底线:

是的。在子模块文件夹中开发是可能的,而且通常很方便,但并非没有风险。明智地选择您的开发模式

【讨论】:

  • +1 先结账。此外,您要确保在切换分支或在 Parent 中进行其他工作之前,您有一个干净的 Child 存储库(已提交任何更改)。
  • 在父仓库中进行简单的日常(编辑、提交、拉取、推送)工作时,我没有遇到子模块未提交更改的问题。但是,切换分支和子模块更新操作可能会带来风险。好点子!
  • 在克隆中开发并不是一个坏主意,只是为了减少您意外使用分离的 HEAD 提交的机会。你当然也可以使用钩子来检查自己。
【解决方案2】:

根据documentation

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

据我所知,如果您正在处理添加子模块的分支,您可以编辑 Child 并将其推送回其存储库。但是,如果您不是将 Child 添加到 Parent 的开发人员,那么您正在使用分离的头,并且需要检查 Child 的单独版本以进行更改,或者进行更改并导出补丁(使用 @987654322 @) 让其他人提交(通过git am)。

【讨论】:

  • "master" 很可能是您签出的分支。但你说得很好!
猜你喜欢
  • 2022-08-03
  • 1970-01-01
  • 2010-12-04
  • 2015-04-24
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多