将具有历史记录的完整远程 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
的上行速度比我自己的快很多...
我目前的漫长而缓慢的方法
具体来说,绕过我的电脑是这样的:
- 使用(github 类)用户界面,在
git.myclient.com
创建一个名为 myProduct
. 的空存储库
- 确保我的本地存储库是最新的
git pull
。
使用 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
- 使用
git remote set-url origin git@git.myclient.com:alice/myProduct.git
将此配置更改为目标存储库。
- 使用
ssh-keygen -o
为 ssh 生成键值对,参见 https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key
- 请 Alice 导航至 设置 > GPG 和 SSH 密钥(通常位于
https://git.myclient.com/settings/keys) 并让她添加上一步中我的 新 SSH 密钥。
- 确保 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
- 现在,我终于可以使用
git push --all origin
将大部分内容推送到客户端。 这是我想加快的缓慢步骤。
- 标签要单独推送,听说:
git push origin --tags
,见How do you push a tag to a remote repository using Git?
- 通过将
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
以此类推
假设我必须 GIT 围栏后面的服务器,比如在 git.mycompany.com
(使用 gitea UI)和 git.myclient.com
(使用 github-like UI),两者都具有 VPN 的高度安全性,多因素身份验证等。我想将我的 完整 存储库 myProduct
交付给 git.myclient.com/alice/myProduct
因为爱丽丝是我的联系人。
我可以直接执行此操作而无需绕过计算机上的本地存储库吗?
因为我在远程工作,mycompany.com
的上行速度比我自己的快很多...
我目前的漫长而缓慢的方法
具体来说,绕过我的电脑是这样的:
- 使用(github 类)用户界面,在
git.myclient.com
创建一个名为myProduct
. 的空存储库
- 确保我的本地存储库是最新的
git pull
。 使用
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
- 使用
git remote set-url origin git@git.myclient.com:alice/myProduct.git
将此配置更改为目标存储库。 - 使用
ssh-keygen -o
为 ssh 生成键值对,参见 https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key - 请 Alice 导航至 设置 > GPG 和 SSH 密钥(通常位于 https://git.myclient.com/settings/keys) 并让她添加上一步中我的 新 SSH 密钥。
- 确保 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 - 现在,我终于可以使用
git push --all origin
将大部分内容推送到客户端。 这是我想加快的缓慢步骤。 - 标签要单独推送,听说:
git push origin --tags
,见How do you push a tag to a remote repository using Git? - 通过将
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
以此类推