我遇到了一个非常奇怪且不太常见的问题,涉及特定的 Windows 构建服务器(Jenkins Slave)。
在詹金斯中,我有一项工作是从特定分支中提取最新代码。
git 尝试执行的实际命令是:
git fetch -t origin +refs/heads/*:refs/remotes/origin/*
运行一个月后,几个小时前,作业突然失败并出现以下错误:
ERROR: Problem fetching from origin / origin - could be unavailable. Continuing anyway
hudson.plugins.git.GitException: Command "C:\Program Files (x86)\Git\bin\git.exe fetch -t origin +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout:
stderr: fatal: pack has 1 unresolved delta
fatal: index-pack failed
我尝试在网上查找一些关于它的帖子,但什么也没找到……
我已经尝试过的事情:
- 卸载git并重新安装
- 删除工作区(由于选择了清除选项,因此工作区也会被删除)
- 从系统中删除所有工作区
- git fsck - 没有有趣的结果
- git verify-pack – 没有有趣的结果
- git index-pack + 相关的包文件 - 这里也没有有趣的结果
更多(希望是重要的)信息:
- 从此服务器,当我通过 CMD/GitBash 工作时 - 同样的问题是仍然存在
- 从其他服务器/PC,我能够使用相同的 git Repo 执行此命令,但这给我带来了麻烦......
- 使用不同 Git Repo 的其他任务在同一构建服务器上运行流畅。
我迷路了。有人能解释一下吗?
答案1
我仍然不知道这一切混乱的根本原因。
但现在我设法通过以下方式克服了它:
在 Jenkins 作业中,在 Git SCM 配置下,存在以下滞后:
- 构建前清理工作空间
- 使用浅克隆
移除其中两个即可解决问题。
之后,可以将它们放回去,它仍然可以工作。
诡异的!!!
答案2
我遇到此问题的原因是git clone
操作“浅显”,因此没有提交的完整历史记录(因此 fetch 无法看到完整的历史记录来计算增量)。
检查您尝试获取的工作树中的 Git 日志,它不应该有完整的历史记录 - 我的只列出了几个提交,列表中最旧的提交表示它正在为 repo 中的所有文件添加一个“新文件” - 我认为是一个被压缩的文件。
确保没有GIT_DEPTH
设置变量,然后
git pull --unshallow
或者
git pull
并再次尝试获取。
答案3
我遇到了同样的问题。我首先从 master 创建了一个新分支,并检查了从该分支部署是否正常,结果发现可以。因此,我尝试删除 master 分支的工作区(手动删除),这解决了我的问题。