GitLab克隆仓库推送Azure DevOps遇RefNames错误,求无需重命名的解决办法
解决Azure DevOps推送时“RefNames consisting of 40 hex characters are not allowed”错误(无需重命名分支/文件)
你遇到的错误是因为Azure DevOps禁止名称为纯40位十六进制字符的引用(这类引用通常是GitLab仓库中遗留的孤立commit引用、临时引用等),而git push --mirror会推送本地仓库的所有引用,包括这类违规引用,触发了平台限制。
以下是无需重命名分支或文件的解决方案:
1. 定位违规引用(可选)
执行命令查看本地所有符合40位十六进制命名规则的引用:
git for-each-ref --format="%(refname)" | grep -E 'refs/(heads|tags)/[0-9a-f]{40}$'
该命令会列出所有触发Azure限制的引用名称。
2. 选择性推送分支和标签(替代--mirror)
放弃--mirror参数,改用仅推送分支和标签的方式避开违规引用:
- 推送所有分支到Azure DevOps(替换
azure为你的远程仓库名称,可通过git remote -v查看):git push -u azure refs/heads/*:refs/heads/* - 推送所有标签:
git push azure refs/tags/*:refs/tags/*
也可以用更简洁的命令一次性完成分支和标签推送:
git push azure --all --tags
--all仅推送所有分支,--tags仅推送所有标签,不会包含那些违规的特殊引用。
3. 清理本地无效引用(可选)
如果本地存在失效的引用,先清理再推送:
git remote prune origin git gc --prune=now
这会移除本地已失效的远程引用和垃圾对象,可能自动清除掉那些违规的孤立引用。
内容的提问来源于stack exchange,提问作者Hari5679
相关产品推荐
相关产品推荐

