将具有历史记录的完整远程 git 存储库备份到另一台远程服务器

Backing up full remote git repository with history to another remote server

假设我必须 GIT 围栏后面的服务器,比如在 git.mycompany.com(使用 gitea UI)和 git.myclient.com(使用 github-like UI),两者都具有 VPN 的高度安全性,多因素身份验证等。我想将我的 完整 存储库 myProduct 交付给 git.myclient.com/alice/myProduct 因为爱丽丝是我的联系人。

我可以直接执行此操作而无需绕过计算机上的本地存储库吗?

因为我在远程工作,mycompany.com的上行速度比我自己的快很多...

我目前的漫长而缓慢的方法

具体来说,绕过我的电脑是这样的:

  1. 使用(github 类)用户界面,在 git.myclient.com 创建一个名为 myProduct.
  2. 的空存储库
  3. 确保我的本地存储库是最新的git pull
  4. 使用 git config --get remote.origin.url 检查我当前的远程来源,例如an answer to How can I determine the URL that a local Git repository was originally cloned from?

    在我的例子中,结果就是 https://git.mycompany.com/b--rian/myProduct.git

  5. 使用 git remote set-url origin git@git.myclient.com:alice/myProduct.git 将此配置更改为目标存储库。
  6. 使用 ssh-keygen -o 为 ssh 生成键值对,参见 https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key
  7. 请 Alice 导航至 设置 > GPG 和 SSH 密钥(通常位于 https://git.myclient.com/settings/keys) 并让她添加上一步中我的 新 SSH 密钥
  8. 确保 SSH 代理是 运行 在我的 windows 框中,如果不是在 GIT Bash 中用 eval $(ssh-agent -s) 启动它,请参阅https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
  9. 现在,我终于可以使用 git push --all origin 将大部分内容推送到客户端。 这是我想加快的缓慢步骤。
  10. 标签要单独推送,听说:git push origin --tags,见How do you push a tag to a remote repository using Git?
  11. 通过将 remote.origin.url 设置为返回步骤 3 中的内容来回退所有内容,在我的例子中它是 git remote set-url origin https://git.mycompany.com/b--rian/myProduct.git.

有没有更简单的方法?

也许您可以在 git.myclient.com 上使用 Git 镜像。

这取决于客户端 VCS (Git)。大多数实现都有镜像选项。

例如,如果客户使用 Gitlab: https://docs.gitlab.com/ee/user/project/repository/repository_mirroring.html

我认为添加第二个遥控器会简单得多...然后推入那个遥控器:

git remote add second url-to-new-repo
git push second master develop # push master and develop to second

以此类推