将项目提交到两个git仓库(github和oschina)

我有 feilong-core 项目,原先只托管源码在 github ,应红薯老大的再三邀请(不要脸的害羞中~~), 最近开始也同步托管在 码云

1. 问题

那问题来了,当我项目文件有修改的时候, 有没有办法 一次提交到两个仓库 ?

  • 命令行如何实现?
  • 如果是eclipse 里面提交又该怎么配置?

2. 方案一: git remote add 方案

目标很明确, 并且也有 朋友 @路小磊 的指点 Git push到多个远程库

顺着思路,我也来尝试, 并且尝试的时候就使用 fork 的项目做测试(玩坏了也不心疼~~)

2.1 命令行

2.1.1 查看

听说可以使用 git remote 命令(你也可以移步见帮助文档)

我们先使用 git remote 看看现在项目git 远程主机情况

➜  java-sdk git:(master) ✗ git remote
origin

再使用 git remote -v 看看

➜  java-sdk git:(master) ✗ git remote -v
origin    https://github.com/venusdrogon/java-sdk.git (fetch)
origin    https://github.com/venusdrogon/java-sdk.git (push)

表示,当前只有一台远程主机,叫做origin,以及它的网址

2.1.2 添加

那么,我使用 git remote add 添加一个远程主机

git remote add oschina https://git.oschina.net/ifeilong/java-sdk.git

再来看看 远程主机信息

➜  java-sdk git:(master) ✗ git remote -v
origin    https://github.com/venusdrogon/java-sdk.git (fetch)
origin    https://github.com/venusdrogon/java-sdk.git (push)
oschina    https://git.oschina.net/ifeilong/java-sdk.git (fetch)
oschina    https://git.oschina.net/ifeilong/java-sdk.git (push)

可以看到已经加进去了

2.1.3 提交

那么怎么提交呢?

随便修改个文件,并 commit

➜  java-sdk git:(master) ✗ git add .
➜  java-sdk git:(master) ✗ git commit -m 'test'
[master c1b96a0] test
 1 file changed, 2 insertions(+)

2.1.4 推送到远程主机

使用 git push 推送到 github 仓库

➜  java-sdk git:(master) git push -u origin master
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (10/10), 964 bytes | 0 bytes/s, done.
Total 10 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 1 local object.
To https://github.com/venusdrogon/java-sdk.git
   ffa5dc5..c1b96a0  master -> master
Branch master set up to track remote branch master from origin.

再推送到 oschina 仓库

➜  java-sdk git:(master) git push -u oschina master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 275 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To https://git.oschina.net/ifeilong/java-sdk.git
   353a92d..c1b96a0  master -> master
Branch master set up to track remote branch master from oschina.

校验下 两个仓库里面的数据, 都是最新的

大功告成,亲个小嘴儿~~

2.2 eclipse 操作

上面脚本要git push 两次才能完成push到两个库,可行,就是麻烦一点

那么eclipse 此时直接使用 egit 插件提交代码会出现什么情况?

图1- 修改文件

将项目提交到两个git仓库(github和oschina)

图2- 提交

将项目提交到两个git仓库(github和oschina)

图3- 结果

将项目提交到两个git仓库(github和oschina)

可以看到使用eclipse 此时提交只提交到 最后的一个仓库, 不是我想要的效果

3. 方案二: git remote set-url 方案

一招不行,那就再换一招,参考 git 给远程库 添加多个url地址 ,使用 git remote set-url 方案

3.1 命令行

3.1.1 remote 移除 oschina

我们先把上面 加的 oschina 仓库去除,使用 git remote rm oschina

➜  java-sdk git:(master) git remote -v
origin    https://github.com/venusdrogon/java-sdk.git (fetch)
origin    https://github.com/venusdrogon/java-sdk.git (push)
oschina    https://git.oschina.net/ifeilong/java-sdk.git (fetch)
oschina    https://git.oschina.net/ifeilong/java-sdk.git (push)

➜  java-sdk git:(master) git remote rm oschina
warning: more than one branch.master.remote

➜  java-sdk git:(master) git remote -v
origin    https://github.com/venusdrogon/java-sdk.git (fetch)
origin    https://github.com/venusdrogon/java-sdk.git (push)

3.1.2 使用 git remote set-url 命令

(你也可以移步见帮助文档)

这时我来git 给远程库 添加多个url地址

试试 git的一个远程库 可以对应多个地址,即我能让远程库origin拥有多个url地址

➜  java-sdk git:(master) git remote set-url --add origin https://git.oschina.net/ifeilong/java-sdk.git

➜  java-sdk git:(master) git remote -v
origin    https://github.com/venusdrogon/java-sdk.git (fetch)
origin    https://github.com/venusdrogon/java-sdk.git (push)
origin    https://git.oschina.net/ifeilong/java-sdk.git (push)

可以看到 origin 有两个 push 远程路径

3.1.3 push

那么随便修改下文件,并提交看看效果

使用 git push origin master

➜  java-sdk git:(master) git push origin master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 278 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/venusdrogon/java-sdk.git
   12aa87a..493354d  master -> master

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 278 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To https://git.oschina.net/ifeilong/java-sdk.git
   12aa87a..493354d  master -> master

可以从log 里面看到 提交到了 两个仓库, 并从仓库页面校验是ok的

大功又告成,再亲个小嘴儿~~

3.2 eclipse 操作

那么eclipse 此时直接使用 egit 插件提交代码会出现什么情况?

图2- 提交

将项目提交到两个git仓库(github和oschina)

图4- 结果

将项目提交到两个git仓库(github和oschina)

可以看到使用eclipse 此时提交 提交到 2个仓库, 这就是我想要的

完美

将项目提交到两个git仓库(github和oschina)

4. 总结

这么一来,我的feilong-core 项目,也就一行 git 命令的事情

➜  java-sdk git:(master) git remote set-url --add origin https://git.oschina.net/ifeilong/feilong-core.git

5. 感悟

  • just do it~~
  • 纸上得来终觉浅,绝知此事要躬行

6. 参考

相关推荐