同步协作
当开发者在本地建立了Git仓库想与远程Git仓库同步,这样Github、Gitlab上的远程仓库就可以作为本地的备份,或者与其他开发者进行协同工作。
下面笔者就以Github为例,讲解如何使用Github与其他开发者进行协作。
创建代码仓库
首先,在Github上点击如图2.9所示的按钮,创建一个新的Repo(代码仓库)。
图2.9 New Repo
点击后,Github提示填写相关的Repo信息,如图2.10所示。
图2.10 Repo信息
最后,通过点击“Create repository”按钮,创建好一个代码仓库。创建完毕后,Github提示如何使用这个Repo,如图2.11所示。
图2.11 Repo提示操作
在创建好的Repo中,Github会提示如何使用这个Repo。完整的指令都列出来了,开发者只需要按照说明操作就可以了。
链接与推送代码
在Github创建好新的Repo之后,会告诉开发者如何在本地创建一个新的Repo或者如何将既存的Repo提交到创建的Git Repo中。
由于笔者已经创建了本地的Git项目,所以可以根据安装提示使用git remote add指令将本地代码仓库添加到远程仓库,代码如下所示。
- ➜ gitTest git:(master) git remote add origin git@github.com:xuyisheng/testGit.git
- ➜ gitTest git:(master) git push -u origin master
- Counting objects: 18, done.
- Delta compression using up to 4 threads.
- Compressing objects: 100% (8/8), done.
- Writing objects: 100% (18/18), 1.39 KiB | 0 bytes/s, done.
- Total 18 (delta 1), reused 0 (delta 0)
- To git@github.com:xuyisheng/testGit.git
- * [new branch] master -> master
- Branch master set up to track remote branch master from origin.
再看Github上的远程仓库,查看刚刚提交的代码,如图2.12所示。
图2.12 提交的代码
README已经提交上去了。这时候再回过头来看看添加到远程服务器的代码。
- git remote add origin git@github.com:xuyisheng/testGit.git
这条指令中的origin指的就是远程仓库的名字。你也可以叫别的名字,但是默认远程仓库都叫origin,以便区分。基于使用习惯,该命名基本上不会修改。
而下一条指令使用代码把修改推送到远程仓库,代码如下所示。
- git push -u origin master
由于git push指令加上了-u参数,所以Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来(不过后面的Push就不需要这个参数了)。
在Push到远程分支之后,笔者再对文件做一些修改,并使用前面讲的添加本地Git仓库的方式将新的修改推送到远程分支,代码如下所示。
- ➜ gitTest git:(master) ✗ git add README.txt
- ➜ gitTest git:(master) ✗ git commit -m "modify again"
- [master e7ae095] modify again
- 1 file changed, 2 insertions(+), 1 deletion(-)
- ➜ gitTest git:(master) git push
- Counting objects: 5, done.
- Delta compression using up to 4 threads.
- Compressing objects: 100% (2/2), done.
- Writing objects: 100% (3/3), 285 bytes | 0 bytes/s, done.
- Total 3 (delta 0), reused 0 (delta 0)
- To git@github.com:xuyisheng/testGit.git
- 5427c66..e7ae095 master -> master
可以发现,这时候再Push代码就不需要使用-u参数了,可以直接使用git push或者git push origin master指定仓库和分支名将新的修改推送到远程分支。
在实际项目中经常会发生这样的协作问题,即开发者A将Push修改到Repo时,开发者B已经将自己的修改Push到了Repo。这时候开发者A在Push的时候,Git会提示使用git pull指令先来获取最新的修改,但这样会在Git历史中留下一个Merge History,这并不是开发者所希望的。因此在这种情况下,可以使用git pull—rebase指令拉取最新修改,该指令的作用是拉取本地代码后,将本地未提交的代码作用到最新版本中,从而避免多余的Merge History。
更新代码
当远程分支上的代码有内容更新时,通过git pull指令即可拉取最新的代码更新,如果拉取的更新代码与本地代码没有冲突,那么Git将在本地自动进行代码Merge工作。
