我的团队使用 AWS CodeCommit,我的公司提供内部托管的 GitHub 服务。
我们在 GitHub 的 CodeCommit 中保留了一个存储库的“镜像”。也就是说,GitHub 中的存储库仅通过 AWS 的推送进行更新。 GitHub 中的存储库旨在成为 CodeCommit 中内容的镜像。 我们有一个 AWS CodeBuild 项目,当提交到 CodeCommit master 时,它会执行
git push --mirror
。这工作了好几年没有问题,最近它停止工作了,我被难住了。这是间歇性故障。我见过它失败 3 次,成功一次,然后又不断失败。这是错误。
git push --mirror [email protected]:TeamOrg/project-x.git
To git.companyname.com:TeamOrg/project-x.git
70614194..8d256e66 origin/master -> origin/master
* [new branch] origin/bug-fix -> origin/bug-fix
! [remote rejected] master (refusing to delete the current branch: refs/heads/master)
error: failed to push some refs to '[email protected]:TeamOrg/project-x.git'
我比较了 CodeCommit 和 GitHub 中主存储库之间的提交历史记录。我希望在 GitHub 中找到 CodeCommit 中没有的提交;这可以通过执行
git push --rebase
来解决,历史记录是相同的,除了 CodeCommit 有尚未推送到 GitHub 的新提交,因为我们的推送已损坏。
关于如何查找原因有什么想法吗?
我考虑过在推送中添加
--force
和/或 --rebase
选项,但我更愿意在猜测解决方案之前先了解问题;特别是因为问题是间歇性的。
看起来源存储库没有本地
master
分支(它只提到了 origin/master
分支)。
如果确实如此,
git push --mirror
将尝试删除github存储库上的master
分支,并且由于分支保护规则,此操作可能会被拒绝。
仔细检查您想要的最终结果。
例如:令人有点惊讶的是,您的 AWS 存储库具有远程分支(例如:存储在
refs/remotes/origin/*
下的引用)而不是“本地”分支(至少是 AWS 存储库本地的,存储在 refs/heads/*
下的引用)。
这可能是某人从本地存储库运行
git push --mirror
到 AWS 远程的影响。
您可以运行
git ls-remote [aws_remote]
查看其中存储了哪些引用。
一旦您同意存储在该 aws 存储库上的引用,请调整 github 上的设置 - 例如:如果这是所需的结果,请删除
master
分支,如果推送到 github 时出现任何错误,请调试问题。