将项目提交到两个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- 修改文件
图2- 提交
图3- 结果
可以看到使用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的一个远程库 可以对应多个地址,即我能让远程库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- 提交
图4- 结果
可以看到使用eclipse 此时提交 提交到 2个仓库, 这就是我想要的
完美
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~~
- 纸上得来终觉浅,绝知此事要躬行