没工作之前一直都有一个疑问:公司里面那么多人都在做开发,最后代码是怎么合一起的?还有代码交付由谁管理?现在接触到代码管理工具就解决疑问了。目前接触到的代码管理工具有svn,git。
git和svn的区别
1.git是分布式的,svn是集中式的。
svn必须有一个服务器版本库就放在一个中央服务器,所有开发人员都是与服务器进行交互的。
git更倾向于分布式开发,每台计算机上都有一个完整的本地版本库,和服务器一模一样。
2.git把内容按元数据方式存储,svn按文件
3.分支不同。
svn创建分支,是创建了一个新的文件及及文件的。创建完分支后,影响全部成员。
git开启分支,并没有创建文件夹,只是多了一个索引文件,记录这个分支的变化。用户想在这个分支里做什么都可以,对其他分支没有任何影响。比较适合多分支并行开发。
参考https://www.cnblogs.com/baby123/p/10411103.html
首先安装git之后,就可以从服务器上拉取代码。作为初学者,这也是踩过坑的。拉取代码之后,这个分支属于branch,然后需要更改分支更新代码才能使用。最开始我不懂这个分支到底什么意思,然后在网上看了几个人写的博客,现再整理一下git分支。
git分支
分支的创建本质上只是创建了一个指向提交对象的指针。开发任务都是并行开发的,所以每个分支都是重新创建一个新环境来写的,分支之间是互不干扰的,直到把这些合并到master主干上。
如图,假设写了第一个版本的代码V1,然后又写了第二个版本的V2,那么v2保留的内容是相对于v1新加的内容,他们之间的关系是V2指向V1,这一条线叫主干master。
在v2的基础上新增功能G1,那么可以在V2上创建G1分支,再创建G2分支来新增功能,这时G1和G2没有交涉,最后确定G1和G2完成之后,再合并到主干master即可。
参考https://www.cnblogs.com/missdx/p/12343771.html
git基本使用
以该图为例,Git pull从服务器拉取最新代码,Git Fetch从服务器拉取最新分支,git push是将本地代码提交到远端。
1.将本地代码提交到本地仓库。
选择git commit->master ,提交备注message(不填写不准提交),勾选需要提交的文件,点击commit,即可将本地代码提交到本地版本库。
2.查看日志
右键TortoiseGit->show log。在日志中,可以查看提交记录。比如,提交人,提交时间,提交了什么文件等等。
3.分支合并
如果希望将newbranch分支能合并到master,右键选择TurtoiseGit->Merge,选择被合并的分支。
4.拉取远端最新的修改内容
右键->git pull,点击确认即可(不要选择master主干,要选分支)
参考https://www.cnblogs.com/xuwenjin/p/8573603.html
5.commit和push的区别
commit操作的是本地库,push操作的是远程库。
git解决代码冲突
1.git冲突的情景
情景一:多个分支代码合并到一个分支时;
情景二:多个分支向同一个远端分支推送代码时。
git的合并中产生具体冲突的情况:
(1)两个分支中修改了同一个文件
(2)两个分支中修改了同一个文件的名称
2.冲突解决方法
情景一:修改冲突代码->add->commit
情景二:修改冲突代码->add->commit->push
git add 命令可将该文件添加到暂存区。
3.例子
(1)情景
本地库中两个分支,修改同一文件同一代码块,两分支先后将修改提交到master,master在合并第二个时,会显示代码冲突。
(2)本地库
在master分支建立一个mergeTest.txt,并在文件中添加“Hello master branch”内容
新建aBranch分支,修改文件内容“Hello master -aBranch branch”
新建bBranch分支,修改文件内容“Hello master -bBranch branch”
(3)合并分支产生冲突
切换到master分支,合并aBranch分支,会成功合并
合并bmaster分支,产生冲突
注:
git merge:默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。
使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,建议采用这种方法。
(4)解决冲突
在当前分支上(master),找到冲突文件,直接修改冲突代码,add,commit
参考https://www.cnblogs.com/gavincoder/p/9071959.html
再总结几个命令:
git stsh:备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区和上次提交的内容一致。同时将当前的工作区内容保存到git栈中。
卑微打工人要提交作业了~