首页 > 技术文章 > git 在不同服务器主机上同步 git 仓库

ibingshan 2019-09-26 16:02 原文

git 在不同服务器主机上同步 git 仓库

参考链接:https://opentechguides.com/how-to/article/git/177/git-sync-repos.html

1.在本地的一个文件夹中执行:

git clone --mirror ssh://[url]/repo_name.git

2.添加一个remote:

cd ropo_name.git

git remote add --mirror=fetch <secondary_romote_name> ssh://[url]/secondary_repo_name.git

注:secondary_repo_name.git 是另外一个服务器上希望同步的git仓库

3.同步

git fetch origin

git push <secondary_remote_name> --all  #这是把所有分支都push

如果想单独push一个分支:

git push <secondary_remote_name> <branch>

例如:

git push <secondary_remote_name> master

设置默认的 push,下次只用 git push 即可:

git push -u <secondary_remote_name> master

4.在remote中添加多个可 push 的 url

有时候我们不止有多一个 remote 的 git 仓库,我们希望在 push 一个 remote 的时候,同时更新多个 url

git remote set-url --add --push <secondary_remote_name> <url>  #注意:一定要把第一个 url 也执行一次,不然每次push ,只会push 你 add 的那些 url,fetch url 并不会push

git remote set-url --add --push <secondary_remote_name> <url_2>

其实这是在 git config 中添加了相应的内容(蓝色):

 

[remote "secondary_remote_name"]
url = ssh://[path]/repo_name.git
fetch = +refs/*:refs/*
pushurl = ssh://[path]/repo_name.git
pushurl = ssh://[path_2]/repo_name_2.git

所以我们可以直接在该 remote section 下面复制修改即可,是不是很方便

分析:

  通过 --mirror 克隆的是一个 bare repo,里面的内容和服务器的一样,进入仓库后,显示的分支是[BARE:master],在这个文件夹里面,不能使用 work tree 相关的 git 命令,例如 git status,git pull。

  secondary_repo_name.git 和 repo_name.git 的内容是完全一致的。

推荐阅读