git的核心目的是解决多人开发的代码维护问题,而GitHub提供了一种基于云服务的空间,但是下面将模拟多人开发的场景,但是首先需要明确一点:master分支不允许被修改,修改一定一定要有dev分支。
为了更加清楚多人协作开发所可能带来的开发问题,下面将dev分支上增加一些修改的代码,也就是说master与dev两个分支的代码有区别,并且同时将这两个分支都提交到GitHub上。
1.创建并切换到dev分支;
git checkout -b dev
2.在dev分支上进行代码的修改而后提交到版本库之中;
git add .
git commit -m "change jianzhu.java and jcn.java in dev"
3.将这两个分支一起提交到GitHub上;
git push origin master
git push origin dev
此时在”d:gitproject“目录中存在有master分支与dev分支一共两个分支,名称都是由gitproject提供的。
4.现在在d:gitproject下是可以连接远程仓库的,如果要想知道有哪些远程仓库,可以使用如下命令:
git remote
如果想要取得一些更加详细信息,可以增加一个 -v的参数:
git remote -v
在这个信息里面给出了明确的抓取更新的远程仓库地址以及推送更新的远程仓库地址。
5.,将jianzhu仓库的内容克隆到一个新的目录中;
git clone [email protected]:NolanJcn/jianzhu.git
现在可以抓取的只有master分支,而并没有包含dev分支。但是一直强调dev分支是开发者真正要使用的分支,而master不是,并且如果说现在假设这个开发者只是一个人。那么也应该找到这个dev分支。
6.抓取GitHub上的dev分支,同时为了区分,在本地上将其变为jcn分支。
git checkout -b jcn origin/dev
本命令表示的是将远程仓库dev的内容抓取到jcn分支上。
git branch
此时只是将本地的jcn分支与远程的dev分支关联上了,但是并没有同步上,内容想要抓取,抓取有两种方式:fetch、pull。
先进行关联:
git branch --set-upstream-to=origin/dev jcn
7.抓取:
git pull
正常来讲如果本地分支与远程分支名称一样,那么没有必要做一些复杂的配置,而且只要在创建本地分支的时候与远程已经产生了关系,素以不需要这么麻烦。
8.现在既然已经存在两个开发者,那么这两个开发者就可能出现互相合作开发的情况,那么一旦是互相合作开发,有可能出现冲突。
在gitpro目录中修改hello.java程序;
将第一个开发者所修改的程序代码同步到远程仓库;
git add .
git commit -m "change hello.java"
git push origin dev
此时第二个开发所具备的代码和第一个开发者发布到仓库的代码不匹配。
在jianzhu目录中也修改了hello.java程序。
随后将其修改提交到版本库,而后发布到远程仓库中。
git branch --set-upstream-to=origin/dev jcn
git push origin jcn
现在将jcn作为了一个新的分支存在,但是严格来讲这不是我们想要的结果,我们想要将当前项目中的hello.java文件与保存在GitHub中的dev分支下的hello.java进行比较;
那么现在先不去考虑分支情况,因为本地的jcn分支与远程的dev分支存在有关联的,只是名称不一样。
此时想要先于GitHub的代码进行同步;
git pull
一旦抓取之后,在这个地方会直接告诉用户那里出现了冲突,随后由于冲突存在,所以观察更改后的hello.java文件。
在这个文件里面已经给出了冲突的程序代码位置。随后手工修改hello.java文件,这样的话就表示解决了当前冲突了。
但是现在要是进行同步操作的话,在GitHub上还是存在有jcn分支。
git add .
git commit -m "conflict hello.java"
git push origin jcn
当前所传递的分支永远只是jcn分支的内容,因为只要是一个新的分支名称,那么在GitHub上就一定要进行一次记录。
但是此时如果分支名称不一样,第一个开发者默认是无法抓取到分支不同的,除非使用以下代码:
git branch --set-upstream-to=origin/jcn dev
表示本地的dev分支与远程仓库的jcn分支关联在一起,而后才可以使用git pull抓取,但是这样做很麻烦。
也就是说如果两个地方的分支名称不一样,对于程序的维护是头疼的,最好的做法是分支名称一样。
9.在第二个开发者的仓库中增加一个dev的分支,随后将代码进行合并;
git checkout -b dev
由于现在dev分支通过jcn分支创建,所以来讲内容完全一样,那么就没有必要再次合并jcn分支了。
10.随后的事情将dev分支发送给GitHub上;
git push origin dev
此时分支的名称统一了,那么自然第一个开发者就可以抓取这个分支的最新修改。
git pull
如果发现第一个开发者没有最新内容,则设置同步:
git branch --set-upstream-to=origin/dev dev
git pull
整个操作流程:
要想进行数据的抓取,必须保证本地的分支要指向一个明确的远程分支;
在开发之中建议不要在其他开发者的环境中再出现新的分支,尽量保持本地分支与远程分支一致。
git push origin --delete jcn