获取指定子模块的当前提交ID

时间:2015-09-01 08:37:42

标签: git git-submodules

我想获取指定子模块的当前提交ID。我想当我进入子模块目录并运行<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <fragment android:layout_width="match_parent" android:layout_height="500dp" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment"/> <View android:layout_width="fill_parent" android:layout_height="1dp" android:background="#181407"/> <LinearLayout android:id="@+id/map_below" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#303230"/> </LinearLayout> 后,我发现这是一个超级项目当前ID。 试过了git rev-parse HEAD,但它对我来说很慢。知道如何更快地获取这些信息吗?

5 个答案:

答案 0 :(得分:11)

您可以从git ls-files -s开始(作为in this answer

cd /path/to/parent/repo
git ls-files -s yourSubmodule

请注意/之后没有尾随的“yourSubmodule”(这是签出子模块的根文件夹)

这将使模式和sha1与 gitlink special entry in the index of the parent repo

相关联
160000 4d77d23305c5623356955ef9f908f4ec76780ba9 0       yourSubmodule

('0'代表the stage number

备选方案:

cd /path/to/repo/parentFolder/of/submodule

git ls-tree @ yourSubmodule
git rev-parse @:./yourSubmodule

rev-parse仅返回子模块SHA1。

答案 1 :(得分:5)

在所需的项目文件夹中打开shell,然后键入以下git命令:

git submodule

结果输出如下:

<module commit> <module-path> (<module-branch)
... 

答案 2 :(得分:0)

git submodule status | grep <submodule_name>也对我来说

从Git 2.16(OP提出问题的第二年,2017年第四季度)开始,这应该更快(即使我的previous answer仍然是可行的选择)。

请参见commit a9f8a37commit 9f580a6commit 74a1064(2017年10月6日)和Prathamesh Chavan (pratham-pc)(2017年9月29日)。
(由Junio C Hamano -- gitster --commit a1bf46e中合并,2017年11月6日)

submodule:从外壳程序到C的端口子模块子命令“状态”

指导者:克里斯蒂安·库德(Christian Couder)
指导者:Stefan Beller
签名人:Prathamesh Chavan

这旨在使git submodule的“状态”成为内置状态。因此,功能cmd_status()从Shell移植到C。这是通过引入四个功能来完成的:module_status()submodule_status_cb()submodule_status()print_status()

函数module_status()充当子命令的前端。它解析子命令的选项,然后调用函数module_list_compute()来计算子模块的列表。然后,此函数调用for_each_listed_submodule()遍历所获得的列表。

然后for_each_listed_submodule()为其列表中的每个子模块调用submodule_status_cb()。将适当的参数传递给函数后,函数submodule_status_cb()会调用submodule_status()。函数submodule_status()负责生成要调用的每个子模块的状态,然后调用print_status()

最后,函数print_status()处理子模块状态的打印。

功能set_name_rev()也从git submodule移植到子模块-内置帮助器功能compute_rev_name(),现在可以根据需要生成修订名称的值。

但是..用C重写了部分“ git submodule”命令后,“ git submodule状态”报告已初始化但尚未填充的子模块的方式尚未正确实现。使用Git 2.26(2020年第一季度)进行了纠正

请参见commit f38c924之前的commit 3b2885e(2020年2月2日)和commit ace912bPeter Kaestle (``)(2020年1月24日)。
(由Junio C Hamano -- gitster --commit f2dcfcc中合并,2020年2月14日)

submodule:修复已初始化但未克隆的子模块的状态

签名人:Peter Kaestle

submodule status”的原始bash助手正在检查已初始化但未克隆的子模块,并在子模块目录中未找到.git文件或文件夹的情况下以减号作为状态前缀。

完成从bash到C的功能的原始端口时,将错过此检查。

答案 3 :(得分:0)

这不是最漂亮的方法,但是如果您将cd插入子模块,则只需git log | head -1

答案 4 :(得分:0)

git rev-parse HEAD:path/to/submodule

对于我的自动化用例,我发现这种方法比公认的答案替代方案更好,因为它输出一个 Hipotetic path/to/submodule 的提交 sha。

<块引用>

PS:感谢heloman