关于git,你真的完全懂了吗?

3,139 阅读11分钟

版本控制系统介绍

CVS分类

       版本控制工具也叫CVS,常用版本工具从实现上来说可以分为以下三类:本地版本控制系统、集中化版本控制系统、分布式版本控制系统,下面我来一一介绍一下这3种的区别。

       本地版本控制系统:最初的版本控制,只是在本地进行保存,每次有修改后就在本地保存一份新代码。它可以保存好自己的所有修改,一个人的项目用一用还是没问题的,但是考虑到团队协作的时候不方便,所以已经被淘汰了。

       集中化版本控制系统:新增了一个远程服务端,支持多电脑和服务端之间的沟通环节,这样大大方便了团队之间的合作。在电脑A上的提交可以上传到服务端上,然后电脑B上可以拉取刚刚的修改。这种也是目前主流的版本控制系统之一,比如SVN就是使用的集中化版本控制系统。但是一旦断网,就没法进行提交代码了。

       分布式版本控制系统:在集中化的基础上,又新增了一个本地的版本控制系统。类似于集中化和本地的结合体,可以降低服务端挂了的风险。增加了本地的版本控制以后,就算服务端出问题不再接收代码,本地仍然可以正常工作。目前最流行的版本控制方式,比如git就是如此。


git和其他CVS的主要区别

区别一  git是分布式,所有操作在本地执行,切断服务器不影响本地代码的保存

区别二  git是记录所有文件的快照,其他CVS是记录每次修改的增量

       其他CVS只是记录了每次的增量数据,所以每次提交的时候都需要去对比代码变化,得出一个增量变化,服务端将增量变化进行保存。所以其他CVS在切换分支的时候会比git慢很多,因为它们要根据增量去计算当前最新文件是什么样的。而git是记录所有的文件,每次有修改后就记录成新的文件,这也就是为什么当不同人在同一分支上提交时,就算没有冲突也需要git pull的原因。因为后面的那次提交和前面的那次提交不一样,系统不知道记录哪个文件为最新文件。

                                     图1.其他CVS的工作原理


                                   图2.git的工作原理


git的安装

如何安装git?

       首先下载git,然后双击安装,一路点确定,使用默认配置即可。

如何检测git是否安装成功

       随便进入一个目录,然后点击鼠标右键,如果有git bash选项,则说明安装成功。

如何配置git用户信息

       每台电脑都需要配置一下当前机器的git信息,用来唯一标注该电脑。使用git config命令进行配置,可以选用global参数,代表该电脑上所有库都采用这个用户信息。

git config --global user.name "Your Name"
git config --global user.email "email@example.com"


git常用命令

git命令真的太多了,我这里只列举一些工作中最常用的命令吧,背太多那些基本用不到的命令也记不住。掌握了上图这些基本的没问题了,还有其他的命令可以碰到问题得时候再去查看。

git branch XX  

创建一个名为XX的分支,创建的时候需要注意看一下自己是在本地库还是远程库中。一般建议在本地库中创建,然后提交的时候再放到远程库中。

git checkout XX

切换到名为XX的分支

git merge XX

合并XX分支上的内容到当前分支,合并以后如果有冲突,最好手动解决,不要用强制覆盖的方式,强制覆盖多了总会出问题的。

git add . 

暂存当前分支上所有的修改到git缓冲区,暂存单个文件用git add 文件名

git commit -m "message"

提交当前分支上的暂存数据到本地git库中,这个时候当前分支才算是真正更新成了最新代码。这里需要注意,只有提交了当前分支上的修改,才可以切换其他分支。

git push

提交当前分支上的修改到远程库中,只有执行了push以后自己本地的代码才算是真正提交成功了。若此时推送失败,可能是其他小伙伴也修改过这个分支。所以需要先git pull拉取一下远程最新的代码,如果其中有冲突,则需要解决完冲突以后再继续提交。

git pull

从绑定的远程库中拉取最新的代码到本地。如果多个人在同一分支上工作,则建议每次在开始工作时以及准备提交前先拉取一次,保证本地修改前的代码和远程一致。

git常用命令速查表:



sourceTree-简单实用的图形化git工具

安装sourceTree

       下载sourceTree,然后点击安装,将会到达下面的界面,需要使用账号才能继续安装。这个账号可以使用谷歌账号,所以如果没有谷歌账号的话需要去申请一个。

登录之后,会让你设置github账号信息,这里直接点跳过就好

接下来会让你设置ssh秘钥,这里可以设置,也可以点取消,后面再设置

接下来会弹出提示说没设置Mercurial,我也不知道这是什么东东,直接不使用就好

sourceTree基本使用

1.导入项目

       导入项目有两种方式,可以从本地选择项目以及填写github地址的方式来导入项目。首先点击克隆/新建,然后输入github地址或者是选择本地的项目。

2.检出分支

       点击操作->检出,选择检出新分支,然后选择远程的分支,输入检出后在本地的分支名,点击确定即可。

3.切换分支

       切换分支非常方便,双击souceTree左边面板上的分支名就可以了。如果当前分支有修改文件,则需要先将修改进行贮藏才可以切换哦。

4.拉取代码

       点击上方操作栏上的拉取按钮,将会弹出分支选择框,选择好想要拉取的分支,点击确定即可

5.暂存代码

       选中工作副本,然后点击暂存所有即可暂存所有文件。也可以选择性地暂存某个文件,先选择好然后点暂存所选就可以了。

6.提交代码

       在已有已暂存代码后,再如上图的3 4 5操作,首先输入好上传的文案,然后选中推送的复选框,最后点提交即可。需要注意的是,这里的提交其实相当于是commit+push,在提交到本地的同时,也会直接推送到远程服务器上。

7.贮藏代码

       点击上面的贮藏按钮对当前分支上的已修改代码进行贮藏,贮藏时可以选择是否保留已暂存代码。贮藏后可以点击左下角的贮藏功能查看刚才的贮藏历史,然后点击应用贮藏即可将刚才的代码恢复到分支上。这个功能还是很好用的,当目前分支上已有修改,并且当前并不想提交的时候,而又需要切换分支时,就可以对当前的已修改代码进行贮藏。


上传项目到github

1.在github上新建仓库

2.拉取刚新建的空项目

       在创建完项目后,就可以获取到项目的github地址,其实就是github在浏览器上的地址。获取到以后随便找个文件夹下,右键git bash,然后git clone 该项目,将该空项目拉取下来,拉取空项目的目的是拉取.git配置。

3.上传项目代码

       将实际项目代码复制到前面clone的那个空文件夹下,最后依次执行git命令

             git add .

             git commit -m ""

             git push

     即可

4.上传readme图片

       首先在github项目上新建一个文件夹,将图片放入其中,并push到服务端。然后再github上点击查看图片详情,复制图片在github上的url。接下来点击到readme中,使用以下规则添加刚刚提交的图片:

               ![图片异常](图片完整url)
       其中前面的图片异常只是没找到图片时的提示,重点是后面小括号内的url填刚刚复制的url即可。


搭建自己的git服务器

       一般来说如果你是项目的第一个开发人员的话,还要搭建一个功能类似于github的私有git服务器。有人会问为什么不直接用github呢,原因是github上代码如果不交钱是公开的,总没有人愿意把自己公司代码公开给别人随便看吧,更没人愿意为了不需要交钱的东西去交钱吧。

        搭建服务器?听起来很恐怖,但其实也是非常的简单,linux提供好了相应的命令,只需要按照命令一个一个往下执行就好了,我这里给出一个写得不错的教程吧,有需要的同学可以拿去直接用。教程链接


大厂是如何使用git的

       大厂使用git的方式一般和github上的开源项目一样。首先git服务器肯定是他们自己搭建的,项目成员通过fork源项目的方式建立自己的远程副本。每次工作时首先在自己本地拉取源项目的develop分支,然后修改代码后首先提交到自己的远程副本中,通过merge request的方式向源项目发起合并代码请求。在经过代码review以后,有些review较严格的团队会合到源项目的其他分支上,经过修改后最终提测的代码才会合到develop上,也有些团队直接合到develop上进行提测,提测一般是将git项目绑定好jenkins,然后在jenkins上选择好分支点击即可。在提测结束以后百分百稳定的代码才会合到master上面,确保master的代码基本稳定。这个时候就新建bugfix分支用来发小版本解决上个版本的bug以及新增一些小需求,在bugfix提交完成后最终合并到develop以及master上面,修改版本号进行下一个版本的开发。


总结

       版本控制工具大大地提升了团队开发的效率,而git又是CVS中目前最主流的工具。本文介绍了git和其他CVS的对比,列出了我觉得工作中最常用的命令。然后推荐了我自己也在用的sourceTree工具,没用过的小伙伴相信我,用过了肯定会相见恨晚的。最后分享了一下如何上传自己的代码到github中,以及大厂是怎么使用git的,希望能对大家有所帮助!