Git plumbing命令用于检测子模块更新并获取暂存区域或工作目录中的哈希值

时间:2017-11-01 22:40:11

标签: git git-submodules git-plumbing

在瓷器模式下,git diff会宣传子模块更改:

$ cd /opt/staging # This is the main Git repository
$ cd software/zemke-rhyne # This is a submodule
$ git pull
$ git diff                                                                                                                  
diff --git a/software/zemke-rhyne b/software/zemke-rhyne
index 0fff2fc..cb69287 160000
--- a/software/zemke-rhyne
+++ b/software/zemke-rhyne
@@ -1 +1 @@
-Subproject commit 0fff2fc52bdc2a62a2647110e712b1b3baa48613
+Subproject commit cb69287a3540054ff85cd14199cf36b4b5098c1a

哪些管道命令可以提供以下信息?

  • 子模块已更新,此处为software / zemke-rhyne
  • 旧哈希,这里是0fff2fc52bdc2a62a2647110e712b1b3baa48613
  • 新哈希,这里是cb69287a3540054ff85cd14199cf36b4b5098c1a

目标是自动化提交消息,通过git rev-list简要记录更新的子模块中的更改。

1 个答案:

答案 0 :(得分:1)

要确定子模块是否已更新,可以使用

mainGrid = (GridLayout)getActivity().findViewById(R.id.mainGrid);

    setSingleEvent0(mainGrid);
    setSingleEvent1(mainGrid);
    setSingleEvent2(mainGrid);
    setSingleEvent3(mainGrid);
    setSingleEvent4(mainGrid);
    setSingleEvent5(mainGrid);

退出状态将指示子模块是最新的(0)还是过期的(1)。

例如,旧的哈希由$ git diff-files --quiet software/zemke-rhyne 显示:

ls-tree

另一种方式是

$ git ls-tree @ software/zemke-rhyne
160000 commit 0fff2fc52bdc2a62a2647110e712b1b3baa48613  software/zemke-rhyne

(有什么区别?如果有人可以发表评论,那将会很棒……)

还有一种方法可以找出子模块是否已更新 和先前的哈希。如果未修改子模块,则以下命令的输出为空,否则如下所示:

$ git ls-files -s software/zemke-rhyne
160000 0fff2fc52bdc2a62a2647110e712b1b3baa48613 0   software/zemke-rhyne

不幸的是,$ git diff-files software/zemke-rhyne :160000 160000 0fff2fc52bdc2a62a2647110e712b1b3baa48613 0000000000000000000000000000000000000000 M software/zemke-rhyne 错过了展示最新哈希值的绝好机会。要查看它,我所能想到的就是在子模块目录中使用diff-files。这似乎有点优雅和脆弱……

rev-list