You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 -T git@devgit.abc.com
    
    看到平台返回的欢迎信息,就说明SSH认证配置没问题了。

第二步:修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:42:45