将项目提交到两个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 给远程库 添加多个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~~
- 纸上得来终觉浅,绝知此事要躬行
6. 参考
-
Git push到多个远程库
-
git 给远程库 添加多个url地址