## **概念及必要性**
在项目开发中,一个好的习惯就是常于备份,而Git就是来帮助我们备份代码的。
也许你遇到这样的情况:你做出了一个软件并上线给到用户在用,用户在用的过程中,哪些功能体验不好,你要去改善,这时候你要在原有的代码【代码文件v1】中做修改但改之前,得做下备份,这时候你就有了备份【代码文件A-v1-backups】的备份文件,当你将用户提给你的这些方面改善好了,这时候你就有了修改后的新文件【代码文件A-v2】,当又有用户觉得其他方面体验不好,你还得改,又多了文件【代码文件A-v3】,依次一直文件v4,v5,v6…直到无限。
这时候问题来了,假如当某一次改动上线后出现严重bug,在时间不允许时,你就得拿出最近一次备份的文件先顶一顶(俗称版本回滚),这个其实还好办。但假如不是最近一次,而是很久之前的,你这时候就需要去文件v1,v2,v3,v4…一个个去找,而此时面对着一堆的文件,你完全想不起来,当初备份的这个是什么,
此时我们就需要用到本章节的内容:版本管理器
目前市面上优秀的版本管理器有两个:
1. 集中式的SVN
2. 分布式的Git
SVN既然是集中式的,有一个统一的文件服务器存放这些文件,每个人单独与之做沟通,但集中式的注定了当作为核心的SVN服务器挂掉之后,所有人都无法在使用。而Git的分布式设计让每个人都有一个完全属于自己的独立仓库,尽管它也有一个中间的交互服务器,但那仅仅只是作为一个中间媒介,当中间节点挂了,你本机有一个完整的代码库,不会对你有过大的影响。
因此,本文档将采用Git作为协同开发中的版本管理器来将讲解如何使用Git
## **1.Git 安装**
参见: 3.2 Git客户端安装过程
## **2. Git使用**
装好Git,我们可以使用纯命令行操作Git,新手建议装个小乌龟TortoiseGit,安装完毕后:

装好Git之后,先来看看Git此类的版本管理工具到底怎么帮我们备份文件的。
备份文件按照常理来说,需要做以下事情:
1、谁备份的?
2、什么时候备份的?
这些不用我们开口Git就帮我们做了。接下来:
3、需要备份哪些文件?
4、备份的这些文件是干嘛用的?
与单人备份有些不同的是,这是多人备份。你有可能你要备份的文件,在你备份之前被别人改过,而你手里的文件暂时没有别人改过的那部分代码,甚至那部分代码你也改了,这样跟假如JavaScript是多线程,操作DOM时,浏览器要听谁一样。这时候,Git要听谁的呢?所以需要:
5、更新别人的代码。
6、看看是否有冲突,处理冲突。
7、你提交代码,Git完成代码备份。
我们一起看一个图:

好了,你知道Git怎么帮你备份了,那你要做的就是配合它,把流程走完,因为Git就是机器人,而且是不智能的,是不会自主学习和变通的,它只能走流程。
先看一看Git的命令行界面(上面安装完Git之后截图里的那个Git Bush Here)

我们陪它走一遍流程(这里暂不涉及到创建库,删除库,切换分支,回滚等等),因为一般情况下,这些操作是配置管理员的工作,开发人员不会涉及,所以我们直接从克隆一份远程仓库的代码开始,看下图:

这就是最常见的走流程,Git没什么,就是走一个备份的流程。
好了,走完了命令行,这里也来走一下小乌龟(TortoiseGit)。
还是走流程,只不过变成可视化了,你不用敲命令了。
看到刚刚右键菜单的git 克隆了没?点击它。

输入你的url,这个url就是你gitHub或gitLab上的仓库地址。看一下github的:

克隆下来了,本地就有了一个仓库。

我们顺便可以看一看分支,因为一般情况下,Git会有一个主分支master,你是没有权限提交代码的,还有一个work或者develop分支,这个是给你开发提交代码用的,而master是给管理员最终测试完合并代码用的。
我们这里只有一个master主分支:

好了先不管命令行,开始我们的小乌龟走流程之旅吧。
假设我们新增了ccc.txt文件,同时又修改了里面的bbb文件。变成这样:

继续走流程,这时候好像得走到 add 那里了吧?嗯是的。

点击Add。点确定就好了。实际上就是执行一句git add .,看看你新增了哪些文件。
接下来流程走到我们要更新代码看看有没有别人更新了啥对吧?再看看需不需要处理冲突。
也就是fetch和merge。(这两个合起来就是pull)一个个来:
fetch:点击上面的fetch,到这里

嗯行,看看你更新了啥。然后按close关掉界面。

这里我们刚刚才clone下来的,所以没啥其他别人的代码。
接下来就开始合并了,将我们的代码先在本地仓库进行合并(这里没其他人代码不用处理冲突。),记得勾选no commit,先别提交我们的commit,最后一步再commit

好了之后,看到是最新的,无需处理冲突。这时候点commit。

这里还记得上面的git commit -m ‘你这些备份的文件是干嘛的’。这时候你就要写你干了啥了。

将我们这些文件是用来干嘛的告诉Git之后,是不是就剩一个流程,那就是提交了?

点击这个push,push就是推,推送的意思。

这样我们就完成了我们的推送,看一下远程仓库已经更新。

这样我们就完成了整一个的克隆、更新、提交代码的流程。gitLab也是一样的。
