- 如果是在 gitee.com 和 github.com 上同步代码,假设默认仓库放到 github.com,只需要
git remote add 仓库别名 gitee.com上的仓库地址
,然后在代码有提交时,执行git push 仓库别名
即可达到目的,仓库别名
自己起一个好记的就行,比如gitee
。 - 现在假设在办公室只能用局域网的 git server,到了周末,放不下工作,想在家继续 coding,那么到了下周一,如何将代码同步到办公室的 git server 呢?
模拟这个场景
- 假设在家里能访问 coding.net,但不能访问 gitee.com(模拟办公室的局域网环境)。
- 而在办公室,既可访问 coding.net 也可访问 gitee.com。
- 正在进行的项目为:remoteT
在办公室, 周五下班前
同时在 gitee.com 和 coding.net 上创建同名仓库(项目):remoteT,然后将 gitee.com 上的仓库 remoteT clone 到本地。
1
git clone https://gitee.com/uncleAndyChen/remoteT.git
添加文件 readme.md,写一行文本:
1. from gitee
。推送
1
2
3git add .
git commit -m'from gitee'
git push添加 coding.net 上的仓库 remoteT ,作为远程仓库来管理,添加后将本地代码推送,使用 Git Bash 或者 cmd,在项目根目录下执行如下指令:
1
2git remote add coding https://e.coding.net/andychen/remoteT.git
git push coding
至此,两个 git server 上的仓库 remoteT 的代码就完全一样了。
远程仓库的配置信息保存到 .git 目录下的 config 文件中了,如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://gitee.com/uncleAndyChen/remoteT.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "coding"]
url = https://e.coding.net/andychen/remoteT.git
fetch = +refs/heads/*:refs/remotes/coding/*
如果要修改远程仓库的别名,把 [remote "coding"]
和 fetch = +refs/heads/*:refs/remotes/coding/*
中的 coding 改为想的名字即可。
周末,在家里
获取 coding.net 上的仓库 remoteT
1
git clone https://e.coding.net/andychen/remoteT.git
修改 readme.md 文件,追加一行文本
2. from coding.net
,修改好之后推送。
到了下周一,回到办公室
获取在 coding.net 上的仓库 remoteT 的修改,获取时需要指定分支:
git pull coding master
,这里的 coding 只是远程仓库的别名,创建的时候起的名字(通过命令git remote add coding https://e.coding.net/andychen/remoteT.git
创建)。1
2
3
4
5
6
7$ git pull coding master
From https://e.coding.net/andychen/remoteT
* branch master -> FETCH_HEAD
Updating 8c02788..ab9d5a4
Fast-forward
readme.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)把在 coding.net 上的仓库 remoteT 的修改再 push 到 gitee.com 上的仓库 remoteT,执行
git push
就行,因为 gitee.com 上的仓库 remoteT 是默认仓库。1
2
3
4
5
6
7
8$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 285 bytes | 95.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered By Gitee.com
To https://gitee.com/uncleAndyChen/remoteT.git
8c02788..ab9d5a4 master -> master
至此,周末在家里通过 coding.net 上的仓库 remoteT 写的代码就完全同步到 gitee.com 上的仓库 remoteT 了。文件 readme.md 的内容变成了:1
21. from gitee
2. from coding.net
获取远程仓库 coding(通过命令 git remote add coding https://e.coding.net/andychen/remoteT.git
创建)的代码时,需要指定分支,否则:You asked to pull from the remote ‘coding’, but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.1
2
3
4
5
6
7
8
9
10$ git pull coding
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://e.coding.net/andychen/remoteT
8c02788..ab9d5a4 master -> coding/master
You asked to pull from the remote 'coding', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
注意事项
在实际推送的时候,如果提示:Updates were rejected because the remote contains work that you do … This is usually caused by another repository pushing
通常意味着离上次 git pull
之后,已经有了新的 push,要先 git pull
,再 git push
。1
2
3
4
5
6
7
8
9[utomcat@localhost mis-api]$ git push gitee
To gitee.com:uncleAndyChen/mis-api.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@gitee.com:uncleAndyChen/mis-api.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.