在 Git 中调整子模块

Tweaking a submodule in Git

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

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

执行此操作的正确方法是什么?

这可能不是使用子模块的最优雅的方式,但我遇到了这种情况,我通过 cd 进入子模块并从那里作为经典处理它来处理它 Git 回购。

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

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

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

[diff]
    submodule = log

这将在 parent 项目中 运行 diff 操作时显示子模块的日志。这不是必需的,但它很方便,因为我不必深入到子模块就可以知道我做了什么等等。

您可以通过 运行 git config diff.submodule log 从您的 parent 存储库中进行本地设置,或者您可以使用 git config --global diff.submodule log.

进行全局设置

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

问了几乎同样的事情,用某种方法 发布 更改。这是另一种方法:

另一个选项,如果您同意的话,是在您在 parent 的下一次提交中,停止将 child 作为子模块处理,并将其集成为您的存储库的子树。