Git那些事儿------ 什么是Git?作用是什么?
接触Git以来,全部踩坑记录
前言
学IT的人,尤其是小白,最头疼的一件事就是,Git命令那么多,我到底应该怎么办,弄着弄着它就报错了!
别怕!最全的踩坑记,助你一臂之力
首先,我们来简单说一下,Git,究竟是个什么神奇玩意儿?
一、Git是什么?
现如今,在各种规模开发中,Git已成为一种上上选择的代码托管技术,基本上大多数的公司都在使用Git进行协同开发。很多代码托管平台也是基于Git来实现的。此文我们只简单介绍Git的基本使用。
Git可以帮我们做到很多的事情,比如代码的 版本控制、分支管理等。
Git里面主要包含的几个概念有远程仓库,克隆,本地仓库,分支,提交,拉取,合并,推送等。
1.1 远程仓库(origin)
远程仓库是指我们代码存储在服务器的地方,这个仓库是我们整个团队中所有人都可以访问的地方。可以包含很多子代码库,以及子代码库下的历代分支信息。
1.2 克隆(clone)
克隆只要是指什么呢?简单来说就是从远程仓库克隆到本地的过程,即将远程代码打包拉取到本地,在此基础上可以实现自己的本地仓库进行代码变更操作,并利用git push 等命。将本地代码提交到远程仓库下自己所属远程分支。
1.3 本地仓库 (dev)
上一概念中我们提到了本地仓库,本地仓库即我们开发人员从远程仓库克隆代码之后,保存在我们本地的代码(这份代码只有你自己能看到哦~)
1.4 分支(branch)
无论是大中小型开发,相对规范的代码开发,在开发中都会遇到多个分支进行,比如主分支(master分支),开发分支(develop分支),但我们开发的时候,一般不在master上面进行开发,而是我们自己从 master 或者开发分支中在分出来一条分支(比如test_branch分支),然后我们就在test分支上进行开发,每个分支都有自己的代码。
这里提示下,在我们创建分支的时候,首字母不要大写,这样会给我们的git带来困惑,导致我们在合并代码的时候必须使用强制覆盖,这是极其不方便的
1.5 提交(add、commit)
在我们结束本地代码编辑后,需要将代码推送到远程分支,确保你的代码在云端仓库,这就需要我们先提交本地到本地仓库,将修改的文件进行提交,并说明修改的内容。注意,此时代码提交只会提交到我们本地的仓库,远程仓库此时还不会修改。
1.6 拉取(pull)
在我们的开发过程中,同一个项目可能是多人协作开发,这个时候,我们就需要将别人修改的代码拉去下来合并到我们自己的代码中。但是如果不同的开发人员修改了统一部分代码,那么就可能发冲突,这时候我们需要解决完冲突时候,才能继续将代码进行提交。
1.7 合并(merge)
在上面我们自己的分支开发完成之后,没有问题之后,需要将我们的分支合并到主分支上面
1.8 推送(push)
之前的所有操作都是在我们本地进行的,远程仓库的代码并没有任何的改变,这个时候就需要我们将本地的代码推送到远程的仓库中,更新远程仓库代码。在推送的过程中,如果我们本地的代码不是最新版本的,就需要我们先将远程代码拉去下来(如果有冲突重新解决冲突,提交),然后在重新推送。
二、Git有什么优点?
相对于SVN而言,Git有很多优势:
2.1 本地化,支持离线
每个开发者都拥有自己的仓库,在自己的仓库可以执行任意行为,提交代码、创建分支、回滚历史、反复提交、归并分支等,且不会影响到其他开发者。
2.2 合并方便
Git分支使用指针,在同一目录下即可切换不同的分支,随便切,随便合并,且合并文件速度比SVN快。
2.3 分布式
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。我们需要一个代码管家,不间断运行,仓库下的成员都从这个“管家“仓库克隆拉取代码到本地,并且把各自的代码推送到“管家”仓库,也可以从“管家”仓库中拉取别人分支下的代码。我们可以自已搭建这台管家服务器,也可以使用GitHub网站(大厂则会使用自己的仓库)。能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
2.4 版本控制
可以记录文件的所有历史变化,当遇到错误时也可以根据需要回滚到任意历史版本,支持多人协作开发编辑同一个文件
2.5 分工协作
(接上述最后一点)如果同时有过2~N个任务,且同一个源代码。还要和别人合作!这时候git就可能帮你排忧解难了,你也可从任意成员的分支里得到项目的最新代码,完全不用经过中央服务器,不会对其他人照成影响。
三、Git的文件状态
当前工作目录中可能存在的文件的状态变化图( 来自 git pro )
untracked:新建的文件状态为untracked,add命令执行后状态变为staged;
unmodified:已存在的文件状态为unmodified,修改文件内容,文件状态变为modified;
modified:修改状态,表示文件已被修改,但是尚未被提交(保存);
staged:暂存状态,表示是被标记了的被修改文件,在下次提交时会将所有标记过的修改保存。
下一篇来记录,使用Git的准备工作