合并不同远程服务器上的两个不同存储库

合并不同远程服务器上的两个不同存储库

我和我的同事在 GitHub 和 GitLab 上都建立了一个新的存储库。一切都很顺利,但由于一个误会,他向 GitHub 推送,而我向 GitLab 推送。我们在 GitLab 上设置了 rep 镜像,但只是单向的,这导致我们的存储库出现分歧。现在,我想合并它们,并仅迁移到 GitLab,但当我这样做时:

git remote add gitlab https://[email protected]/username/rep.git
git push --mirror gitlab

我收到以下错误:

remote: GitLab: You are not allowed to force push code to a protected branch on this project
! [remote rejected] branch only on GitLab (pre-receive hook decline)
! [remote rejected] master -> master (pre-receive hook declined)
! [remote rejected] origin/HEAD -> origin/HEAD (deny updating a hidden ref)
! [remote rejected] origin/master -> origin/master (deny updating a hidden ref)
error: failed to push some refs to URL OF THE REP ON GITLAB

虽然我可以尝试将代码复制并粘贴到 GitLab 上的存储库,但我想以一种干净的方式进行(如果存在这样的方式的话)。

答案1

仔细看看gitlab的错误信息:“You are not allowed to force push code到受保护的分支在这个项目上”。默认情况下,gitlab 将master分支指定为“受保护”,并且项目管理员也可以选择指定其他受保护的分支。所以你需要找到一种方法来避免强制推送master

我个人以前从未遇到过这种情况,但我首先会尝试(在备份我的本地存储库之后,以防万一!)从本地主分支创建一个新分支,从 gitlab 中提取并将其主分支合并到你的主分支中,再推送回 gitlab(不再需要对主分支进行强制推送),然后将你创建的新分支(你的旧主分支)合并到 gitlab 主分支中。

或者,如果您的本地存储库正好处于您希望在 gitlab 中“最新”的状态,那么也可以选择删除(或重命名)gitlab 中的项目,然后根据本地副本创建一个新项目来替换它。这样可以避免必须(重新?)合并项目的两个版本,并且(与复制/粘贴内容不同)可以保留所有历史记录,因为您的本地存储库知道这一点。

相关内容