如何有效地审查 git 子模块更新/变基?

nh2*_*nh2 3 git git-diff git-submodules

我们的项目使用 git子模块来固定我们的库依赖项之一。

我们定期rebase将子模块跟踪上游更改,并且我们在它上面还有一组我们不能轻易上游的提交。

当有人重新设置子模块时,我只git diff在父存储库中看到这一点:

--- a/mysubmodule
+++ b/mysubmodule
@@ -1 +1 @@
-Subproject commit abc12345abc12345abc12345abcd12345abc1234
+Subproject commit efg67890efg67890efg67890efg67890efg67890
Run Code Online (Sandbox Code Playgroud)

那不是很有用。当我git diff在子模块中提交这些提交时,我会得到很多输出,包括所有上游更改,我们的提交位于顶部。我无法轻易判断对我们自己的提交执行的某些冲突解决是否引入了一些错误。

如何有效地对子模块的更改进行代码审查?

nh2*_*nh2 6

使用git range-diff. 它正是为此目的而设计的,以审查提交范围。

如果您的父提交存储库具有:

-Subproject commit abc123
+Subproject commit efg678
Run Code Online (Sandbox Code Playgroud)

然后cd进入您的子模块并运行(注意三点...):

-Subproject commit abc123
+Subproject commit efg678
Run Code Online (Sandbox Code Playgroud)

示例输出解释:

git range-diff 输出解释

  • 每个提交行都显示了 rebase 前后的提交 SHA。
  • 顶部绿线显示上游项目中的新提交。如果您想查看自上次重新定位以来上游发生了什么变化,请阅读它们。
  • 线显示rebase 未更改提交
  • 红线是作为解决冲突的一部分而被删除的提交(例如,如果您将一个补丁程序贡献给上游项目)。
  • 绿线是作为解决冲突的一部分添加的提交(例如,如果需要进行新的自定义以使您的项目与新的上游代码一起工作)。
  • 红绿线显示作为 rebase 的一部分更改的提交(例如,当冲突解决方案必须更改您的提交以使用修改后的上游代码时)。

    当它们出现时,它们还包括一个正常的差异,因此您可以检查差异。

作为审查的一部分,您应该特别检查添加/删除顶部提交是否正确(或者是否意外删除了一些),以及冲突解决(红绿线)是否正确。