點擊上方“后端技術精選”,選擇“置頂公眾號”
技術文章第一時間送達!
作者:taadis
my.oschina.net/taadis/blog/3073220
題外話,開發中遇到問題或者學習新技術時缺少交流環境,可以點擊加入【后端技術交流群】
日常需求
以前源碼是托管在 github 的, 現在想要同步托管在 gitee, 一做備份分發, 二方便國內下載使用(網速可觀), 三防止被墻…
方式一 使用 gitee 的強制同步
之前在 github 托管了這么一個項目 mirrors-in-china, 后來國內出了 gitee, 那么想著把項目同步一份到 gitee, 方便大家查看… 正巧 gitee 提供強制同步功能, 方便操作…
我還是只用維護 github 那份源碼, gitee 這邊沒忘記的話, 手搓點擊下強制同步按鈕即可.
但是容易忘記, 造成兩邊不完全同步.
不過我這個項目本身就非常簡單, 這點同步時差完全沒大問題, 夠用, 并且沒有其他任何多余的操作.
方式二 手搓 push 多次
換另一個項目來說, 我之前在 github 托管了這么一個項目 GlobalScanner.Sdk, 應廣大小伙伴需求, 希望把項目在國內同步一份, 方便下載/參考/使用.
那么不外乎就是配置多個遠程庫地址, 多次推送咯, 那么我們先來看看現有遠程庫的情況:
$?git?remote?--verbose
origin??git@github.com:taadis/GlobalScanner.Sdk.git?(fetch)
origin??git@github.com:taadis/GlobalScanner.Sdk.git?(push)
可以看到目前僅有 git@github.com:taadis/GlobalScanner.Sdk.git 這個遠程庫地址.
我們來加一個 gitee 的遠程地址, 首先在 gitee 建好同步倉庫, 然后我們在本地添加一個新的遠程庫地址:
$?git?remote?add?giteeorigin?git@gitee.com:taadis/GlobalScanner.Sdk.git
添加完成后我們查看一下:
$?git?remote?--verbose
giteeorigin?????git@gitee.com:taadis/GlobalScanner.Sdk.git?(fetch)
giteeorigin?????git@gitee.com:taadis/GlobalScanner.Sdk.git?(push)
origin??git@github.com:taadis/GlobalScanner.Sdk.git?(fetch)
origin??git@github.com:taadis/GlobalScanner.Sdk.git?(push)
可以查看到以下2個遠程庫地址:
giteeorigin: 是我們新加的 gitee 的遠程庫地址
origin: 是我們之前在 github 的遠程庫地址
接下來同步:
git?add?.
git?commit?-m?"add?gitee"
git?push?-u?origin?master
git?push?-u?giteeorigin?master
有鏈接有真相:
github:
https://github.com/taadis/GlobalScanner.Sdk/commit/da00f0584c5a2699bb621e99a00fe15dece33d38
gitee:
https://gitee.com/taadis/GlobalScanner.Sdk/commit/da00f0584c5a2699bb621e99a00fe15dece33d38
比之前多個一次 git push 操作…其他和之前沒有太大區別…沒有更多的心智負擔.
但是經常容易忘記…
方式三 最多跑一次
不想著法偷懶的 coder 不是好程序員, 秉承 "最多跑一次" 的理念, 讓我們試試怎么一次 push 統統搞定.
在本地 git 倉庫里找到這個文件 .git/config, 內容如下:
[core]
????repositoryformatversion?=?0
????filemode?=?false
????bare?=?false
????logallrefupdates?=?true
????symlinks?=?false
????ignorecase?=?true
[remote?"origin"]
????url?=?git@github.com:taadis/GlobalScanner.Sdk.git
????fetch?=?+refs/heads/*:refs/remotes/origin/*
[branch?"master"]
????remote?=?origin
????merge?=?refs/heads/master
[remote?"giteeorigin"]
????url?=?git@gitee.com:taadis/GlobalScanner.Sdk.git
????fetch?=?+refs/heads/*:refs/remotes/giteeorigin/*
改為如下:
合并2個 remote 配置
[core]
????repositoryformatversion?=?0
????filemode?=?false
????bare?=?false
????logallrefupdates?=?true
????symlinks?=?false
????ignorecase?=?true
[remote?"origin"]
????url?=?git@github.com:taadis/GlobalScanner.Sdk.git
????url?=?git@gitee.com:taadis/GlobalScanner.Sdk.git
????fetch?=?+refs/heads/*:refs/remotes/origin/*
[branch?"master"]
????remote?=?origin
????merge?=?refs/heads/master
上面這個手動配置是為了更好的說明而已, 其實可以用以下命令簡化操作, 在 origin 節點下補充了一個新的遠程地址.
$?git?remote?set-url?--add?origin?git@gitee.com:taadis/GlobalScanner.Sdk.git
看看補充后的遠程地址情況
git?remote?--verbose
origin??git@github.com:taadis/GlobalScanner.Sdk.git?(fetch)
origin??git@github.com:taadis/GlobalScanner.Sdk.git?(push)
origin??git@gitee.com:taadis/GlobalScanner.Sdk.git?(push)
注意看后面的 (fetch)(push), 相信你會明白點什么.
然后我們可以繼續這樣使用來實現 github & gitee 的同步推送和分發:
git?add?.
git?commit?-m?"github?&?gitee?同步推送和分發"
git?push?origin?master
有鏈接有真相:
github:
https://github.com/taadis/GlobalScanner.Sdk/commit/6846226ff2be56ed0f58c9345bac4a0170f1880f
gitee:
https://gitee.com/taadis/GlobalScanner.Sdk/commit/6846226ff2be56ed0f58c9345bac4a0170f1880f
可以看到, 使用上和最初沒有任何區別, 只是多配置了一次, 算是實現了 "最多配(跑)一次".
總而言之
幾種方式, 各取所需咯.
推薦閱讀(點擊即可跳轉閱讀)
1.?SpringBoot內容聚合
2.?面試題內容聚合
3.?設計模式內容聚合
4.?排序算法內容聚合
5.?多線程內容聚合
6.?7個IntelliJ IDEA必備插件,提高編碼效率
7.?IntelliJ IDEA 從入門到上癮教程,2019圖文版!
看到這里了,關注一個?