带有可能前缀的 grep SHA-1 哈希



我想从我的子模块的 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

最新更新