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 的內容是完全一致的。