Git仓库中build.sh脚本执行git checkout异常及构建问题求助
解决Git仓库克隆后build.sh切换到旧提交的问题
看来你的问题核心是全新克隆的仓库本地master分支没有和远程同步,加上HTTPS认证失败导致代码拉取中断,最终用旧提交完成构建。咱们一步步来拆解解决:
第一步:彻底切换到SSH协议(根治认证问题)
你之前修改了主仓库的远程URL,但大概率子模块还是沿用HTTPS地址,这才导致认证错误反复出现。
- 先确认主仓库的远程URL已经改为SSH:
git remote set-url origin git@devgit.abc.com:WebApps/myProject.git # 验证修改是否生效 git remote -v - 批量修改所有子模块的远程URL为SSH(不用逐个手动修改):
git submodule foreach --recursive 'git remote set-url origin $(git remote get-url origin | sed "s/https:\/\/devgit.abc.com\//git@devgit.abc.com:/")' - 务必把新机器的SSH公钥添加到你的devgit.abc.com账户中,测试连接是否正常:
看到平台返回的欢迎信息,就说明SSH认证配置没问题了。ssh -T git@devgit.abc.com
第二步:修复build.sh里的分支切换逻辑
你脚本里的git checkout {branchname}逻辑有漏洞,全新克隆后如果本地分支没有正确关联远程分支,就会出现切换到旧提交的情况。把脚本里的分支切换步骤改成这样:
# 默认使用master分支,支持传参覆盖分支名 TARGET_BRANCH="${1:-master}" # 切换到目标分支:如果本地无此分支,自动从远程创建并跟踪 git checkout "$TARGET_BRANCH" || git checkout -b "$TARGET_BRANCH" "origin/$TARGET_BRANCH" # 拉取远程最新代码,确保本地分支与远程完全同步 git pull origin "$TARGET_BRANCH"
这样修改的优势:
- 不管本地是否存在目标分支,都能正确关联对应的远程分支
- 强制拉取最新代码,从根源避免本地分支落后远程的情况
第三步:验证完整执行流程
现在用SSH重新克隆仓库,再运行脚本测试:
git clone git@devgit.abc.com:WebApps/myProject.git cd myProject REGISTRY=xyz-ci.olympus.abc.com TAG=master FROM_TAG=master ./build.sh
为什么之前的修复没起作用?
- 把分支名改成
origin/master是错误操作:git checkout origin/master会进入分离头指针状态,此时你操作的是远程分支的快照,而非本地可跟踪的分支,后续构建自然会使用旧提交 - 只修改主仓库的SSH URL没用:子模块的远程地址还是HTTPS,更新子模块时会触发认证错误,导致整个流程中断,停留在旧的HEAD状态
内容的提问来源于stack exchange,提问作者A.R.K.S
相关产品推荐
相关产品推荐

