第一章 :Git 介紹

@Iw 發表於 2020-09-23
Git

第一章 :Git 介紹

1:Git 簡介

1.1:版本控制

什麼是版本控制 ?

​ 我們為什麼要關心它呢?版本控制是一種記錄一個或若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。

為什麼要使用版本控制 ?

​ 軟體開發中採用版本控制系統是個明智的選擇。有了它你就可以將某個檔案回溯到之前的狀態,甚至將整個專案都回退到過去某個時間點的狀態。就算你亂來一氣把整個專案中的檔案改的改刪的刪,你也照樣可以輕鬆恢復到原先的樣子。但額外增加的工作量卻微乎其微。你可以比較檔案的變化細節,查出最後是誰修改了哪個地方,從而找出導致怪異問題出現的原因,又是誰在何時報告了某個功能缺陷等等。

版本控制工具應該具備的功能

協同修改

​ 多人並行不悖的修改伺服器端的同一個檔案。

資料備份

​ 不僅儲存目錄和檔案的當前狀態,還能夠儲存每一個提交過的歷史狀態。

版本管理

​ 在儲存每一個版本的檔案資訊的時候要做到不儲存重複資料,以節約儲存空 間,提高執行效率。這方面 SVN 採用的是增量式管理的方式,而 Git 採取了文 件系統快照的方式。

許可權控制

​ 對團隊中參與開發的人員進行許可權控制。

​ 對團隊外開發者貢獻的程式碼進行稽核——Git 獨有。

歷史記錄

​ 檢視修改人、修改時間、修改內容、日誌資訊。

​ 將本地檔案恢復到某一個歷史狀態。

分支管理

​ 允許開發團隊在工作過程中多條生產線同時推進任務,進一步提高效率。

集中化的版本控制系統

​ 集中化的版本控制系統諸如 CVSSVN 以及 Perforce 等,都有一個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過客戶端連到這臺伺服器,取出最新的檔案或者提交更新。多年以來,這已成為版本控制系統的標準做法。

​ 這種做法帶來了許多好處,現在,每個人都可以在一定程度上看到專案中的其他人正在做些什麼。而管理員也可以輕鬆掌控每個開發者的許可權,並且管理一個集中化的版本控制系統; 要遠比在各個客戶端上維護本地資料庫來得輕鬆容易。

事分兩面,有好有壞。這麼做最顯而易見的缺點是中央伺服器的單點故障。

如果伺服器當機一小時,那麼在這一小時內,誰都無法提交更新,也就無法協同工作

​ 並不是說伺服器故障了就沒有辦法寫程式碼了,只是在伺服器故障的情況下,編寫的程式碼是沒有辦法得到保障的.試想 SVN 中央伺服器掛機一天.你還拼命寫了一天程式碼,其中 12 點之前的程式碼都是高質量可靠的,而且有很多閃光點.而12 點之後的程式碼由於你想嘗試一個比較大膽的想法,將程式碼改的面目全非了.這樣下來你 12 點之前做的工作也都白費了 有記錄的版本只能是 SVN 伺服器掛掉時儲存的版本!要是中央伺服器的磁碟發生故障,碰巧沒做備份,或者備份不夠及時,就會有丟失資料的風險。最壞的情況是徹底丟失整個專案的所有歷史更改記錄,而被客戶端偶然提取出來的儲存在本地的某些快照資料就成了恢復資料的希望。但這樣的話依然是個問題,你不能保證所有的資料都已經有人事先完整提取出來過。只要整個專案的歷史記錄被儲存在單一位置,就有丟失所有歷史更新記錄的風險。

分散式的版本管理系統
​ 於是分散式版本控制系統面世了。在這類系統中,像 GitBitKeeper 等,客戶端並不只提取最新版本的檔案快照,而是把程式碼倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個映象出來的本地倉庫恢復。因為每一次的提取操作,實際上都是一次對程式碼倉庫的完整備份更進一步,許多這類系統都可以指定和若干不同的遠端程式碼倉庫進行互動。籍此,你就可以在同一個專案中分別和不同工作小組的人相互協作。分散式的版本控制系統在管理專案時 存放的不是專案版本與版本之間的差異.它存的是索引(所需磁碟空間很少 所以每個客戶端都可以放下整個專案的歷史記錄)。

在這裡插入圖片描述

分散式的版本控制系統出現之後,解決了集中式版本控制系統的缺陷:

​ 1:斷網的情況下也可以進行開發(因為版本控制是在本地進行的)。

​ 2:使用 GitHub 進行團隊協作,哪怕 GitHub 掛了 每個客戶端儲存的也都是整個完整的專案(包含歷史記錄的)。

1.2 Git 和 SVN 優缺點介紹

集中式 SVN

svn因為每次存的都是差異 需要的硬碟空間會相對的小一點  可是回滾的速度會很慢
優點: 
    程式碼存放在單一的伺服器上 便於專案的管理
缺點: 
    伺服器當機: 員工寫的程式碼得不到保障
    伺服器炸了: 整個專案的歷史記錄都會丟失

分散式 Git

git每次存的都是專案的完整快照 需要的硬碟空間會相對大一點
    (Git團隊對程式碼做了極致的壓縮 最終需要的實際空間比svn多不了太多 可是Git的回滾速度極快)
優點:
    完全的分散式
    大部分操作在本地完成,不需要聯網
    完整性保證
    儘可能新增資料而不是刪除或修改資料
    分支操作非常快捷流暢
    與 Linux 命令全面相容
缺點:    
    學習起來比SVN陡峭(命令列比較多)

1.3 Git 圖解

在這裡插入圖片描述

2:Git 安裝

2.1:下載

Git下載地址

2.2:安裝步驟

沒有太多的要求,一直點選 Next 就好了

3:Git 初始化配置

3.1:使用者資訊

​ 第一次要配置的是你個人的使用者名稱和電子郵件。這兩條配置在每次提交都會引用這兩條配置資訊,說明誰提交了更新,所以會隨更新內容一起被永久納入歷史記錄:

$ git config --global user.name "username"
$ git config --global user.email "[email protected]"
//檢視已有的配置資訊可以使用
git config --list

4:Git 結構

4.1: 結構
在這裡插入圖片描述
4.2: Git 和程式碼託管中心

​ 程式碼託管中心的任務:維護遠端庫。

​ 區域網下:GitLab 伺服器。

​ 外網環境下:GitHub碼雲

4.3:本地庫和遠端庫

團隊內部協作
在這裡插入圖片描述

跨團隊協作
在這裡插入圖片描述