如何验证子模块哈希是否被推送到远程?

How to verify if the submodule hash is pushed to the remote?

我有一个包含许多子模块的 monorepo,每次在我的 monrepo 上提出 PR 以更新子模块的哈希值时,我需要 运行 一个 jenkins 作业来查看源分支中的哈希值是否PR 位于子模块的远程位置。

这是为了避免在构建子模块时失败(因为有时人们无法将更改提交到远程,但仍会更新哈希)

  1. 最快的方法是运行并行执行一些命令
  2. 这些命令是什么?

提前致谢

git clone <url> --branch $PR_SOURCE_BRANCH --single-branch <somefoldername>
after this??

正如@joanis 先生在评论中所建议的那样,我将注意力从 git 命令转移到了 bitbucket rest API,并且响应很快

node {
    //SCM checkout
    stage('Perform Hash check') {
        cleanWs()
        sh "git clone <url> --branch $PR_SOURCE_BRANCH --single-branch <somefoldername>"
        dir(<somefoldername>) {
            def map = [:]
            def commitList = sh( script:"(git submodule status | awk '{ print $1 \" \" $2 }')",returnStdout: true).replace("-","").split("\n")
            commitList.each {
                map[it.split(" ")[0].trim()] = it.split(" ")[1].trim()
            }
            map.each { commitid, reponame ->
                def url = "https://api.bitbucket.org/2.0/repositories/reposlug/$reponame/commits/$commitid"
                final def (String response, int code) = sh(script: "curl -s -w '\n%{response_code}' -u username:app-password $url", returnStdout: true).trim().tokenize("\n")
                if (code != 200) {
                    error()
                }                
            }
        }
        
    }
}

将我的评论提升为答案,因为解决方案有效。

做一些研究,我找不到 Git 命令来做你想做的事,但如果你的 Git 服务器包含一个 repo 浏览界面,就像 GitHub 那样,正在尝试获取

https://github.com/<space>/<repo>/commit/<hash>

成功时给你 200,失败时给你 404,从而告诉你提交是否存在。

由于此页面仅指向提交中文件的索引,但不包含任何实际内容,因此这应该是一个非常有效的检查。