【发布时间】:2021-04-06 23:12:30
【问题描述】:
以下代码在 Azure Pipeline 中运行,以将源镜像到另一个 git 存储库。
git remote add --mirror=fetch mirror MIRROR_REPO
git push mirror --progress --prune +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/*
当代理运行时,它会在特定提交处检查代码,这会导致具有提交 SHA 名称的分离头。这是代理生成的日志:
* [new ref] 6ADFB183A4A2C94A2F92DAB5ADE762A47889A5A1 -> origin/6ADFB183A4A2C94A2F92DAB5ADE762A47889A5A1
git checkout --progress --force 6ADFB183A4A2C94A2F92DAB5ADE762A47889A5A1
Note: switching to '6ADFB183A4A2C94A2F92DAB5ADE762A47889A5A1'
我猜这就是git push mirror 命令失败并出现以下错误的原因:
remote: error: GH002: Sorry, branch or tag names consisting of 40 hex characters are not allowed.
remote: error: Invalid branch or tag name "6ADFB183A4A2C94A2F92DAB5ADE762A47889A5A1"
我正在寻找一种方法,可以在每次管道运行时将所有分支和标签从我的源存储库推送到我的镜像存储库。
谢谢!
【问题讨论】:
-
错误信息很清楚:看起来你不能有这么奇怪的分支名称。请注意,提交名称使用小写十六进制字符,而不是大写十六进制字符。无论如何,将它们用作分支名称似乎是个坏主意。
-
是的,很清楚,这里的问题是名称是由 Azure DevOps 生成的,它不是真正的分支,而是处于分离状态的头部,否则我只会重命名分支
-
* [new ref]行表明它已经创建了一个引用,而不仅仅是使用了一个分离的HEAD。 (一个 detached-HEAD 可能会工作,但 ref 肯定不行。它没有说* [new branch]的事实很有趣:它可能创建了一个非分支 ref。无论如何 GitHub 都拒绝它。)不是确定你可以在这里做些什么;代理的行为很糟糕。 -
嗨@nor0x。您能否参考答案并尝试跳过默认结帐步骤?如果答案能给你一些帮助,请随时告诉我。谢谢。
标签: git github azure-devops azure-pipelines mirror