好的,首先,我对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)
答案 0 :(得分:2)
有人搞砸了你的主项目中的子模块引用。基本上,您的主仓库总是引用子模块仓库中的特定提交,并且提交引用您的子模块(72294b9c60128b4495dfe0bf3aa014b3bf1853e9
)似乎不存在。
如果1)有人在子模块项目中进行了检查并且其头部已分离,或者2)子模块项目本身已经以不包含提交的方式进行了更改,则会发生这种情况。
然而,问题应该出现在Hudson之外,无论你是否克隆了你的项目。如果不是,可能只是您的Hudson克隆已损坏,可以删除并重新创建。这也许是可行的。
如果这没有做任何事情并且您确实需要解决问题,请查看this thread以获取解决方案,您也可以通过this blog post了解更多详情。
作为个人观点,子模块很容易破解。如果你是“非常新的git”,你应该避免接触那些,但是首先要用git整体用法弄湿你。
答案 1 :(得分:0)
该线程已有几年历史,但是我遇到了同样的问题,我想分享解决方法。
我的问题与许多人在这里和其他地方提到的缺失提交无关,而是与Hudson / Jenkins的内部有关,即Git数据如何存储在临时工作区目录中:可以访问,则子模块更新将失败。
因此,我的解决方法是在结帐构造扩展名中的RelativeTargetDirectory
和CloneOption
旁边使用显式SubmoduleOption
(此处superproject
是项目带有子模块,并且BRANCH_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
的文件夹