代码同时更新到Gitee和github

由于国内同步到Gitee更方便,国外同步到github更方便,需要把同一套代码同时同步到Gitee和github。把这个过程记录下来。

同时,由于github禁止了用户名和密码来认证,因此,这里对于Gitee和github统一采用ssh认证。注意,选择ssh认证之后,代码库clone的命令的细节会和用https的方式不同。

第一步,生成ssh key公钥和私钥对。可以采用不同的协议。在这里用rsa格式。进入~/.ssh目录下,输入命令:

$ ssh-keygen -t ed22519 -C "YourGIthubEmailbox" -f "github_id_rsa" 

直接两次回车.会在文件夹下生成github_id_rsa和github_id_rsa.pub.Gitee已经不允许rsa编码的公钥,因此,改成ed22519。

第二步,把github_id_rsa.pub的内容添加到github的SSH Keys中,取个名字,保存。

针对Gitee,重复这个过程。

第三步,在~/.ssh文件夹下新建config文件,添加以下内容

# gitee 
 
Host gitee.com 
HostName gitee.com 
PreferredAuthentications publickey 
IdentityFile ~/.ssh/gitee_id_rsa 
 
# github 
 
Host github.com 
HostName github.com 
PreferredAuthentications publickey IdentityFile ~/.ssh/github_id_rsa 

第四步,添加识别 SSH keys 新的私钥。为了让 SSH 识别新的私钥,需要将新的私钥加入到 SSH agent 中

$ ssh-agent bash  
$ ssh-add ~/.ssh/github_id_rsa
$ ssh-add ~/.ssh/gitee_id_rsa

第五步,测试是否连接成功。运行如下命令,看是否受到欢迎信息:

$ ssh -T git@github.com
$ ssh -T git@gitee.com

这样认证方式就设置好了。下面,我们来建立代码库,来使用这个ssh key认证方式和Gitee以及github连接。

第一,建立本地代码库和远程相连。假设Gitee和github都已经建立代码库,test.git。我们需要查看代码库,获取这个代码库的ssh访问地址,例如 git@gitee.com:XXX/test.git。然后把这个地址通过 git clone和git remote add从其中一个远程代码库创建本地代码库,以及把新创建的本地代码库连接到另一个远程代码库。

$ git clone git@gitee.com:XXX/test.git
$ git remote add github git@github.com:XXX/test.git

第二,同步代码库。用git config -e 或者用命令行git remote set-url origin来修改config文件,得到以下的效果(也就是origin下面包含两个远程库的信息,两个远程库分别有自己的名字和信息):

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@gitee.com:XXX/test.git
url = git@github.com:XXX/test.git
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "github"]
url = git@github.com:XXX/test.git
fetch = +refs/heads/:refs/remotes/github/
[remote "gitee"]
url = git@gitee.com:XXX/test.git
fetch = +refs/heads/:refs/remotes/gitee/

有了这个状态,就可以通过git add,git commit和git push 来同时把本地库文件push给两个远程库,以及用git pull来从两个远程库pull到本地。如果需要针对独自远程库的push和pull,则用相应的名称,gitee和github就可以。例如

git remote update 同时从两个库拉过来本地;

git pull github master 仅仅从github库拉过来本地;

git push github 仅仅从本地推送到github。

当然,如果只为了同步速度,仅仅使用Gitee也可以,只需要把Gitee的ip地址修改成154.213.2.253。这个地址对于国外用户,会快很多很多。可以通过修改/etc/hosts文件,或者修改ssh下的config文件。