在 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
作为子模块处理,并将其集成为您的存储库的子树。
假设我有一个回购 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
作为子模块处理,并将其集成为您的存储库的子树。