如何有效地审查git子模块更新/回扣?

如何有效地审查git子模块更新/回扣?,git,git-submodules,git-diff,Git,Git Submodules,Git Diff,我们的项目使用git来固定我们的一个库依赖项 我们定期重新设置子模块的基础,以跟踪上游的更改,并且在其上还有一组提交,我们无法轻松地向上游提交 当有人重定子模块的基期时,我只在父回购的git diff中看到这一点: --- a/mysubmodule +++ b/mysubmodule @@ -1 +1 @@ -Subproject commit abc12345abc12345abc12345abcd12345abc1234 +Subproject commit efg67890efg6789

我们的项目使用git来固定我们的一个库依赖项

我们定期
重新设置子模块的基础,以跟踪上游的更改,并且在其上还有一组提交,我们无法轻松地向上游提交

当有人重定子模块的基期时,我只在父回购的
git diff
中看到这一点:

--- a/mysubmodule
+++ b/mysubmodule
@@ -1 +1 @@
-Subproject commit abc12345abc12345abc12345abcd12345abc1234
+Subproject commit efg67890efg67890efg67890efg67890efg67890
这不是很有用。当我
git diff
在子模块中进行这些提交时,我得到了大量的输出,包括所有的上游更改,而我们的提交就埋在中间。我无法轻易判断我们自己实施的一些冲突解决方案是否带来了一些错误


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

使用
git range diff
它正是为了审查提交范围而设计的

如果您的家长提交回购有:

-Subproject commit abc123
+Subproject commit efg678
然后将
cd
放入子模块并运行(注意三点
):

git范围差异abc123…efg678

解释的示例输出:

  • 每个提交行都显示了重基前后的提交SHA
  • 顶部的绿色线显示上游项目中的新提交。如果您想了解自上次重定基准以来上游发生了什么变化,请阅读它们
  • 黄色行通过重基显示未更改的提交
  • 红色行是作为冲突解决方案的一部分而被删除的提交(例如,如果您向上游项目贡献了顶部的一个补丁)
  • 绿色行是作为冲突解决方案的一部分而添加的承诺(例如,如果需要新的定制以使项目与新的上游代码协同工作)
  • 红色和绿色行显示了作为重新基础的一部分更改的提交(例如,冲突解决方案必须更改顶部的提交才能使用修改后的上游代码)

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


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

假设您有邪恶的同事,审核任何重定基础的唯一好方法是重新执行操作,在不解决任何冲突的情况下作出临时承诺;i、 e.提交冲突标记,然后将该提交与您的同事所做的提交进行比较,这将准确显示与解决冲突的方式相对应的更改。这同样适用于合并;只有重做一遍,我才能立即看到他们还潜入了哪些变化。