## **概念及必要性**
在項目開發中,一個好的習慣就是常于備份,而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也是一樣的。