3

好的,首先,我对 git 很陌生。

我已经建立了一个构建,但是它刚刚开始失败,并出现以下错误。

FATAL: Command "git submodule update" returned status code 1:
stdout: 
stderr: fatal: reference is not a tree: 72294b9c60128b4495dfe0bf3aa014b3bf1853e9
Unable to checkout '72294b9c60128b4495dfe0bf3aa014b3bf1853e9' in submodule path 'sub/Android-ViewPagerIndicator'

hudson.plugins.git.GitException: Command "git submodule update" returned status code 1:
stdout: 
stderr: fatal: reference is not a tree: 72294b9c60128b4495dfe0bf3aa014b3bf1853e9
Unable to checkout '72294b9c60128b4495dfe0bf3aa014b3bf1853e9' in submodule path 'sub/Android-ViewPagerIndicator'

    at hudson.plugins.git.GitAPI.launchCommandIn(GitAPI.java:838)
    at hudson.plugins.git.GitAPI.launchCommand(GitAPI.java:800)
    at hudson.plugins.git.GitAPI.submoduleUpdate(GitAPI.java:429)
    at hudson.plugins.git.GitSCM$4.invoke(GitSCM.java:1308)
    at hudson.plugins.git.GitSCM$4.invoke(GitSCM.java:1269)
    at hudson.FilePath.act(FilePath.java:851)
    at hudson.FilePath.act(FilePath.java:824)
    at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1269)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1325)
    at hudson.model.AbstractBuild$AbstractBuildExecution.defaultCheckout(AbstractBuild.java:676)
    at jenkins.scm.SCMCheckoutStrategy.checkout(SCMCheckoutStrategy.java:88)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:581)
    at hudson.model.Run.execute(Run.java:1516)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:236)
4

2 回答 2

3

有人在您的主项目中弄乱了您的子模块引用。基本上,您的主存储库始终引用您的子模块存储库中的特定提交,并且引用您的子模块之一的提交 ( 72294b9c60128b4495dfe0bf3aa014b3bf1853e9) 似乎不存在。

如果 1) 有人在子模块项目中签入了其头部分离或 2) 子模块项目本身已以不再包含提交的方式进行更改,则可能会发生这种情况。

但是,无论您在哪里克隆项目,该问题也应该出现在 Hudson 之外。如果不是,则可能只是您的 Hudson 克隆已损坏,可以删除并重新创建。这也可能是可行的测试。

如果这不起作用并且您确实需要解决问题,请查看此线程以获取解决方案,您还可以通过此博客文章了解更多详细信息。

作为个人观点,子模块很容易被破坏。如果您“对 git 非常陌生”,则应避免接触这些内容,但首先要了解 git 的整体使用情况。

于 2012-11-20T13:35:45.700 回答
0

这个帖子已经有几年了,但我遇到了同样的问题,我想分享我是如何解决它的。

我的问题与许多人在此处和其他地方提到的丢失提交无关,而是与 Hudson/Jenkins 的内部结构有关,即 Git 数据如何存储在临时工作区目录中:如果以某种方式可以访问,子模块更新将失败。

所以我的解决方法是在 checkout 构造的扩展中使用和RelativeTargetDirectory旁边的显式(这里是带有子模块的项目的名称,并作为环境变量给出):CloneOptionSubmoduleOptionsuperprojectBRANCH_NAME

checkout([
    $class: 'GitSCM',
    branches: [[name: '${BRANCH_NAME}']],
    doGenerateSubmoduleConfigurations: false,
    extensions: [[
        $class: 'RelativeTargetDirectory',
        relativeTargetDir: 'superproject'
    ], [
        $class: 'CleanBeforeCheckout'
    ], [
        $class: 'CloneOption',
        honorRefspec: true, noTags: true, reference: '', shallow: true
    ], [
        $class: 'SubmoduleOption',
        disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false,
        reference: '', trackingSubmodules: false
    ]],
    submoduleCfg: [],
    userRemoteConfigs: [[
        credentialsId: '...',
        url: 'https://.../superproject.git']]
])

作为此步骤的结果,您应该会看到在 Jenkins/Hudson 工作区中superproject@tmp命名的主文件夹旁边创建了一个名为的文件夹superproject

于 2020-04-09T00:47:54.370 回答