我想获取指定子模块的当前提交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
,但它对我来说很慢。知道如何更快地获取这些信息吗?
答案 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 a9f8a37的commit 9f580a6,commit 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 ace912b,Peter 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