我有一个顶级仓库,里面包含了一些git子模块,我可以用下面的命令对它进行git diff:
git diff d1e92 ade34
这只表明子模块中有一些哈希值发生了变化,而不是子模块本身发生了变化。
我发现:
git diff --submodule=diff d1e92 ade34
其如预期的那样工作并且还示出了子模块内部的真实差异。
现在我想对git difftool
做同样的事情,但是我找不到任何语法可以给我预期的结果。
如果我简单地使用
git difftool -d --submodule=diff d1e92 ade34
我只看到更改的哈希值,而看不到子模块更改的内容。
我想看到所有子模块在主存储库中的所有变化。另一个问题只要求子模块中的差异。我的问题不是Git Directory Diff does not work in my submodule的重复,因为它正好是我想做的相反的操作!
1条答案
按热度按时间hgb9j2n61#
我在搜索类似问题时遇到了您的主题。
我发现了一种获取信息的方法,通过编写脚本并调用difftool,为每个子模块使用适当的commit #(有点类似于foreach方法),但仍然会为每个子模块获得一个新示例。
下面是为获取结果而创建的别名;我使用了几个别名来更好地调试我的脚本,只需在git bash中调用 *git dtz 2 commit 1 commit 2 * 来使用它。
有趣的部分是git diff-tree命令比较commit 1和commit 2;剩下的就是输出消息传递给difftool。你可以用git ls-tree创建一个类似的命令,但它只能在HEAD vs commit 1中工作。虽然git ls-tree已经识别了子模块的提交,但git diff-tree只使用objectId(子模块为'160000')。