1. 程式人生 > 實用技巧 >Git&GitHub學習和運用(1.介紹和使用)

Git&GitHub學習和運用(1.介紹和使用)

1.版本控制系統主要用途

協同開發

  通常在軟體專案的開發建設過程中,一般會有多名工作人員同時對專案開展工作,那麼此時的專案工程不可能是一個獨立的資源,這個時候就需要將專案工程提供給各個工作人員對同一份專案進行操作。

衝突解決

  在軟體協同開發的過程中,很有可能出現多名開發人員對同一個功能下的同一檔案進行編輯,由於各自的編輯的內容不同,那麼在上傳編輯的內容時就會發生衝突,此時版本控制系統就有一種機制來解決衝突。

版本記錄

  每輛車到了一定時間都會有更新換代的時候,軟體專案亦是如此,軟體專案會根據不同業務階段迭代形成不同階段的版本,那麼此時就需要版本控制系統來對不同的版本進行記錄。

  有版本的記錄我們可以根據不同的使用場景對專案版本進行排程使用,例如專案接入了某個新的功能,在上線後出現了很嚴重的Bug,並且Bug很難再一時之間解決,這個時候為了保險起見不影響正常的業務,通常會要求專案回退到新功能上線前的一個版本,由於版本控制系統的記錄功能,此時我們可以穩定快速的進行版本的回退操作。

歷史追查

  專案接入了版本控制,那麼任何對專案的操作都會留下痕跡。例如在生產環境出現Bug,我們可以通過版本控制系統查閱開發階段是誰負責編寫的程式碼,以便進行追責。另外也可以用於不同版本之間對程式碼的改動進行分析。

分支管理

  通常實際專案中,我們的軟體工程檔案不會僅僅只有單獨一份。我們會根據不同的場景將軟體工程檔案劃分為多份。

  試想下如果你的專案工程只有一份,當你正如火如荼的開發實現新的需求功能時,在生產環境上出現了Bug需要及時的修復,此時你只能在僅有的一份專案工程中進行Bug修復,但是新開發的功能還沒有完成,這就產生了一個混亂的局面。

  所以我們必須對專案工程通過版本控制系統建立不同的分支體系,每個使用場景都是獨立的,不同使用場景之間就不會出現衝突。


2.集中式與分散式

2.1.集中式版本控制系統

結構圖:

  集中式實現了大部分開發中對專案版本控制的需求功能,結構簡單,上手容易。另外集中式版本控制系統存在一個很明顯的問題,所有的專案檔案都集中儲存在一臺伺服器上,一旦伺服器出現問題(崩潰、硬體損壞),那麼專案檔案會有丟失的風險。

  經典的集中式版本控制系統包括以下:

    CVS:很老的系統太過陳舊、簡陋;

    VSS:微軟的產品,視覺化效果好但並不流行,該工具使用了悲觀鎖,一旦上鎖一個程式碼檔案在同一時間只能允許一名開發者操作,其他的開發者要使用必須要等待前一個開發者使用完成解鎖後,開發效率低。

    SVN:當下最主流的集中式版本控制系統

2.2.分散式版本控制系統

結構圖:

  Git就是目前世界上最先進、主流的分散式版本控制系統。

  與集中式最大的區別:不僅僅使用雲伺服器託管了專案,在每個專案人員電腦本地都儲存這一份專案倉庫。另外這樣的結構這有兩點好處:

    1.即使是託管伺服器出現了各種故障,也不會造成專案檔案的丟失;

    2.即使是於託管伺服器斷開了連線,也可以進行專案的版本控制管理。


3.Git的基本使用

Git安裝程式

連結:https://pan.baidu.com/s/1d6S3Eoohfwpnx-jBkQyTww

提取碼:9agh

3.1.設定使用者名稱和郵箱

操作命令:

git config --global user.name "使用者名稱"
git config --global user.email "郵箱"

操作參考圖:

另外可以通過“當前使用者”的資料夾中,找到.gitconfig檔案檢視配置的使用者資訊。當然也可以直接通過編輯該檔案修改使用者資訊。如圖:

3.2.建立初始化倉庫

  在專案目錄空白處滑鼠右鍵彈出選單列表,在其中點選選擇“Git Bash Here”,在命令視窗輸入:git init,此時專案就通過Git建立了一個版本庫,並且專案目錄中會建立一個名稱為“.git”的隱藏目錄。

  操作參考:

如果專案使用SVN進行版本控制的話,同樣也會建立一個名稱為“.svn”的隱藏目錄,它們兩者的區別:

  “.svn”目錄不會因為專案體積的增長而影響自身的體積也過大的增長,該目錄始終都屬於體積很小的目錄,因為“.svn”目錄只會記錄一些版本資訊;

  “.git”的隱藏目錄則會因為隨著專案體積的增長而增長自身的體積,因為“.git”目錄相當於一個本地的程式碼庫,會儲存著各個版本的原始碼資訊幷包括版本資訊。

3.3.提交檔案到版本庫

3.3.1.檢視專案狀態

專案通過Git建立版本庫後,可以通過在命令列視窗輸入“git status”來檢視當前專案中檔案的控制狀態,操作參考如圖:

上圖在輸入命令後,提示出當前版本庫有一個檔案處於未提交的狀態。

3.3.2.新增操作

操作命令:git add 檔名

操作參考圖-輸入新增命令後再檢視狀態:

通過此命令後新增的檔案僅僅被新增到暫存區,實際上沒有加入到版本庫中。PS:如果需要提交所有檔案,則可以將檔名替換為*

3.3.3.提交

在命令列輸入:git commit 檔名 -m “註釋”,通過此命令後文件則才會提交到版本庫中,從而才能進行版本的控制。

操作參考圖-輸入提交命令後再檢視狀態:

注意:不管是新增或是修改操作,最終都需要進行commit命令操作。

3.4.檢視檔案操作記錄

可以通過輸入命令:”git log --pretty=oneline 檔名”或”git log 檔名”

3.4.1.”git log 檔名”—操作參考圖:

3.4.2.操作參考圖-”git log --pretty=oneline 檔名”:

3.5.版本穿越

用於將當前專案回退到我們指定的版本

第一步,查詢獲取版本標識

操作命令:git reflog

第二步,使用版本標識進行回退

操作命令:git reset --hard 版本標識

3.6.檔案檢出

用於獲取新檔案或覆蓋當前工作副本

操作命令:git checkout 檔名

3.7.檔案刪除

通過檔案的物理刪除是無法直接將版本庫中的檔案刪掉的,需要在對版本庫執行提交命令。

第一步,物理刪除檔案

第二步,執行提交命令


4.Git檔案區域

工作區

從版本庫檢出儲存在本地硬碟的檔案區域,也叫工作副本用於我們實際開發工作的區域;

本地庫

隱藏目錄.git就是一個本地的程式碼倉庫,它會儲存所有版本的檔案資訊,即使和程式碼託管的伺服器斷開也可以通過本地庫進行版本控制,也可以用於在程式碼託管的伺服器檔案丟失情況下作為備份。

暫存區

在對檔案進行修改、新增、刪除時,往往這些操作沒有實際的同步到版本庫,只是將這些操作停留在暫存區,這個時候需要commit命令才能將操作同步到版本庫。


後續詳見第二節.....