首页 > 解决方案 > 在 Git 中调整子模块

问题描述

假设我有一个 repoparent和一个 repo child,其中最新的是第一个的子模块。

我的child回购由第三方维护。我想跟踪这个第三方所做的最新更新,同时也对这个子模块进行我自己的特定更改,以使其与我的父 repo 兼容。

这样做的正确方法是什么?

标签: gitgit-submodules

解决方案


这可能不是使用子模块的最优雅的方式,但我有这种确切的情况,我通过cd-ing 进入子模块并从那里作为经典的 Git 存储库处理它来处理它。

这样,很容易将我自己的child项目 fork 设置为origin,将原始child项目设置为upstream. 我可以从upstream原始项目(由第三方维护)中获取最新更新,进行自己的更改并将它们推送到origin以便可以共享。

要更新parentrepo,我只需暂存并将更改提交到子模块。

为了知道parent在我提交这些更改时对项目的子模块进行了哪些更改,我在我的 git 配置文件中有:

[diff]
    submodule = log

当从parent项目中运行差异操作时,这将显示子模块的日志。这不是必需的,但它很方便,因为我不必去子模块知道我做了什么,等等。

git config diff.submodule log您可以通过从您的存储库运行来在本地parent设置它,也可以使用git config --global diff.submodule log.

git diff --submodule请注意,通过从父 repo 运行而不是git diff(如果您不想使用配置文件)运行,您会得到相同的结果。


推荐阅读