SourceTree、GitLab与TeamCity结合Git LFS使用时持续出现身份验证问题
问题根因定位
你的问题核心是网络架构调整后,两个出口(普通网络/VPN网络)的公网IP不同,GitLab的身份校验会话绑定了请求IP,同时Git LFS默认走HTTPS接口拉取大文件:即使仓库配置了SSH协议,Git LFS默认仍会调用HTTPS端点进行身份校验,这就导致IP切换后原有HTTPS凭证会话失效,出现固定半小时失效的403错误。
本地环境修复方案
1. HTTPS协议修复方案(推荐,彻底解决切换网络失效问题)
- 第一步:清空所有现有Git凭证,执行命令
git config --global --unset credential.helper,再手动删除Windows凭证管理器里所有gitlab.com相关的条目,确保无残留。 - 第二步:配置Git凭证缓存支持多场景,执行
git config --global credential.helper manager-core,Windows新版Git自带的Git Credential Manager Core支持跨网络场景的身份刷新,不会绑定会话IP。 - 第三步:给Git LFS配置独立的身份校验规则,执行
git config --global lfs.https://gitlab.com/.accessbasicAuth true,强制Git LFS调用Git的全局凭证管理器获取PAT,不要单独缓存凭证。 - 第四步:验证配置:随便找一个仓库执行
git lfs pull,如果提示输入凭证,输入GitLab账号,密码字段填你之前生成的PAT即可,后续切换网络不会再出现403失效问题。
2. 现有SSH配置遗留问题修复
如果你坚持用SSH协议,可解决两个现存问题:
- 自动加载Putty私钥:打开Putty的Pageant工具,右键点击托盘图标选择「Add Key」,选中你的私钥后,在Pageant设置里勾选「开机自动启动」,同时把私钥路径添加到Pageant的自动加载列表,无需每次手动添加。
- Git LFS SSH协议下身份告警修复:执行两个命令,第一个
git config --global lfs.gitlab.com.access ssh,强制Git LFS走SSH协议校验身份,不要调用HTTPS端点;第二个git config --global lfs.https://gitlab.com/PROJECTPATH.git/info/lfs.locksverify true,关闭锁验证提示,后续推送不会再出现告警。
TeamCity流水线修复方案
你的TeamCity报错核心是构建代理的Git LFS默认走HTTPS端点拉取文件,没有拿到有效凭证,修复步骤:
- 第一步:在TeamCity的构建配置页,找到「版本控制设置」,点击你绑定的GitLab仓库的编辑按钮,把「LFS 传输协议」从默认的「自动」改为「SSH」。
- 第二步:在构建代理的环境变量里添加
GIT_LFS_SKIP_SMUDGE=1,先跳过拉取代码时的自动LFS拉取,然后在构建步骤的最前面加一个执行命令行的步骤,执行git lfs pull --ssh,强制走SSH拉取LFS文件。 - 第三步:如果还是报错,就给构建代理的全局Git配置添加LFS的身份规则,执行
git config --system lfs.https://gitlab.com/.accessToken 你的GitLab PAT,直接给LFS配置全局可用的PAT凭证,不需要依赖SSH会话。
内容的提问来源于stack exchange,提问作者bts_slawa
相关产品推荐
相关产品推荐

