我想从我的子模块的 SHA-1 提交哈希git submodule status <PATH>
grep。根据git submodule --help
:
递归] [--] [...]
显示子模块的状态。这将为每个打印当前签出提交的 SHA-1 子模块,以及子模块路径和 SHA-1 的 git 描述输出。每个 SHA-1 将 可能以 - 如果子模块未初始化,则 + 如果当前签出的子模块,则以 + 为前缀 提交与在包含存储库的索引中找到的 SHA-1 不匹配,如果子模块具有 U 合并冲突。
所以结果看起来像这样:
f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
描述中提到每个哈希都可能以+
或-
为前缀。我对符号不感兴趣,因此,无论它给我什么结果,我都想得到没有前缀的 40 个字符的哈希。
例:
input: +f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
desired output: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1
input: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1 my-submodule (remotes/origin/HEAD)
desired output: f1eeb6aa2a5009b5ef68b5b754499dcb3ab575d1
我已经尝试过类似awk '{print $1;}' | grep -e '[0-9a-f]{40}'
的东西,但它似乎没有删除前缀。有什么优雅的解决方案吗?
我想从子模块的 SHA-1 提交哈希
git submodule status <PATH>
grep。
为什么要经历回旋?直接问你想要什么:
git rev-parse :<PATH>
将选项-o
添加到 grep 命令中。
-o
:仅打印匹配行的匹配(非空(部分,每个此类部分在单独的输出行上
您可以使用git ls-tree
的输出:
而不是:
D:gitgit>git ls-tree master -- sha1collisiondetection
160000 commit 855827c583bc30645ba427885caa40c5b81764d2 sha1collisiondetection
你会得到:
git ls-tree master -- sha1collisiondetection|awk "{print $3}"
855827c583bc30645ba427885caa40c5b81764d2