如何在GIT中合并子模块更改和主模块?

问题描述 投票:1回答:1

我是一个C#开发人员,试图找出Git。这是一个与我在集中式VCS中使用的环境完全不同的环境(我对TFS非常熟悉)。我在Git上观看了一些优秀的Pluralsight视频,并通过了教程并对基本的Git功能感到自信,但是我认为我缺少一些关于合并/变基的基本信息。

我已经分叉和修改了mediawiki以及它的一些扩展(分叉它们并重新命名我的.gitmodules指向我的分叉版本)。我目前已经部署到生产的1.22.5(对应于分支REL1_22),并且我已经完成了所有更改。我还提交了我的子模块更改。这些更改会提示主repo中的另一个更改,即重新指定子模块引用以指向新提交。

这是逃避我的部分。假设我想在master中重现我的更改。在TFS中,每个分支都在不同的目录中。合并时,所有代码都复制到另一个目录中,处理冲突并签入。使用Git,我用git checkout master切换分支,将我留在同一目录中(虽然我知道Git恢复了目标分支的快照)指向,根据需要添加/删除文件和文件夹)。此时,如何合并子模块+ main的更改?我是否使用git merge <SHA-1>合并子模块中的特定提交,然后在主项目中再次使用git merge(使用更新的子模块参考SHA-1)?是否有更简洁的方法将所有内容包装在一个分支中,并将该分支合并到主(和其他发布分支)?也许git rebase是我正在寻找的,重播我在另一个分支上的所有变化?

git git-submodules git-merge
1个回答
2
投票

此时,如何合并子模块+ main的更改?

通常在主仓库(包括子模块的仓库)中合并您的分支。 这将更新表示子模块的更新SHA1的gitlink (special entry mode 160000):当您在主仓库中合并时,您不会合并子模块中的文件,您只需更新那些gitlink SHA1。

然后,在合并之后,运行git子模块更新,以更新这些子模块的内容。

合并父repo中的分支并不意味着你必须合并子模块中的任何东西:子模块用于将嵌套git repo的开发与其父repo分离,同时在后者中保留前者的精确引用( gitlink)。

© www.soinside.com 2019 - 2024. All rights reserved.