Git詳解

wydilearn發表於2022-05-22

目錄

1.版本控制

1.1、什麼是版本控制

1.2、常見的版本控制工具

1.3、版本控制分類

2.Git軟體下載

2.1、啟動Git

2.2、常用的Linux命令

2.3、Git配置

2.4、設定使用者名稱與郵箱(使用者標識,必要)

3.Git基本理論(重要)

3.1、三個區域

3.2、工作流程

4.Git專案搭建

4.1、建立工作目錄與常用指令

4.2、本地倉庫搭建

4.3、克隆遠端倉庫

5.Git檔案操作

5.1、檔案的四種狀態

5.2、檢視檔案狀態

5.3、忽略檔案

6.使用碼雲

7.IDEA中整合Git

8.說明:GIT分支

8.1、IDEA中操作


1.版本控制

1.1、什麼是版本控制

版本控制(Revision control)是一種在開發的過程中用於管理我們對檔案、目錄或工程等內容的修改歷史,方便檢視更改歷史記錄,備份以便恢復以前的版本的軟體工程技術。

  • 實現跨區域多人協同開發
  • 追蹤和記載一個或者多個檔案的歷史記錄
  • 組織和保護你的原始碼和文件
  • 統計工作量
  • 並行開發、提高開發效率
  • 跟蹤記錄整個軟體的開發過程
  • 減輕開發人員的負擔,節省時間,同時降低人為錯誤

簡單說就是用於管理多人協同開發專案的技術。

沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟體開發過程中將會引入很多問題,如軟體程式碼的一致性、軟體內容的冗餘、軟體過程的事物性、軟體開發過程中的併發性、軟體原始碼的安全性,以及軟體的整合等問題。

無論是工作還是學習,或者是自己做筆記,都經歷過這樣一個階段!我們就迫切需要一個版本控制工具!

 多人開發就必須要使用版本控制!否則代價比較大。

1.2、常見的版本控制工具

主流的版本控制器有如下這些:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

版本控制產品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現在影響力最大且使用最廣泛的是Git與SVN

1.3、版本控制分類

本地版本控制

記錄檔案每次的更新,可以對每一個版本做一個快照,或是記錄補丁檔案,適合個人用,如RCS 

 集中版本控制 (svn)

所有的版本資料都儲存在伺服器上,協同開發這從伺服器上同步更新或上傳自己的修改.

 所有的版本資料都存在伺服器上,使用者的本地只有自己以前所同步的版本,如果不連網的話,使用者就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有資料都儲存在單一的伺服器上,有很大的風險這個伺服器會損壞,這樣就會丟失所有的資料,當然可以定期備份。代表產品:SVN、CVS、VSS

分散式版本控制 Git 

每個人都擁有全部的程式碼!安全隱患!

所有版本資訊倉庫全部同步到本地的每個使用者,這樣就可以在本地檢視所有版本歷史,可以離線在本地提交,只需在連網時push到相應的伺服器或其他使用者那裡。由於每個使用者那裡儲存的都是所有的版本資料,只要有一個使用者的裝置沒有問題就可以恢復所有的資料,但這增加了本地儲存空間的佔用。

不會因為伺服器損壞或者網路問題,造成不能工作的情況!

 Git與SVN的主要區別

SVN是集中式版本控制系統,版本庫是集中放在中央伺服器的,而工作的時候,用的都是自己的電腦,所以首先要從中央伺服器得到最新的版本,然後工作,完成工作後,需要把自己做完的活推送到中央伺服器。集中式版本控制系統是必須聯網才能工作,對網路頻寬要求較高。

 Git是分散式版本控制系統,沒有中央伺服器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯網了,因為版本都在自己電腦上。協同的方法是這樣的:比如說自己在電腦上改了檔案A,其他人也在電腦上改了檔案A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。Git可以直接看到更新了哪些程式碼和檔案!

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

聊聊Git的歷史

同生活中的許多偉大事物一樣,Git 誕生於一個極富紛爭大舉創新的年代。

Linux 核心開源專案有著為數眾廣的參與者。絕大多數的 Linux 核心維護工作都花在了提交補丁和儲存歸檔的繁瑣事務上(1991-2002年間)。到 2002 年,整個專案組開始啟用一個專有的分散式版本控制系統 BitKeeper 來管理和維護程式碼。

Linux社群中存在很多的大佬!破解研究 BitKeeper !

到了 2005 年,開發 BitKeeper 的商業公司同 Linux 核心開源社群的合作關係結束,他們收回了 Linux 核心社群免費使用 BitKeeper 的權力。這就迫使 Linux 開源社群(特別是 Linux 的締造者 Linus Torvalds)基於使用 BitKeeper 時的經驗教訓,開發出自己的版本系統。(2周左右!) 也就是後來的 Git!

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

Git是免費、開源的,最初Git是為輔助 Linux 核心開發的,來替代 BitKeeper!

 Linux和Git之父李納斯·託沃茲(Linus Benedic Torvalds)1969、芬蘭

 


2.Git軟體下載

開啟 [git官網] https://git-scm.com/,下載git對應作業系統的版本。

所有東西下載慢的話就可以去找映象!

官網下載太慢,我們可以使用淘寶映象下載:http://npm.taobao.org/mirrors/git-for-windows/

 下載對應的版本即可安裝!

安裝:無腦下一步即可!安裝完畢就可以使用了!

2.1、啟動Git

安裝成功後在開始選單中會有Git項,選單下有3個程式:任意資料夾下右鍵也可以看到對應的程式! 

 Git Bash:Unix與Linux風格的命令列,使用最多,推薦最多

Git CMD:Windows風格的命令列

Git GUI:圖形介面的Git,不建議初學者使用,儘量先熟悉常用命令

2.2、常用的Linux命令

平時一定要多使用這些基礎的命令!

  • cd : 改變目錄。
  • cd . . 回退到上一個目錄,直接cd進入預設目錄
  • pwd : 顯示當前所在的目錄路徑。
  • ls(ll): 都是列出當前目錄中的所有檔案,只不過ll(兩個ll)列出的內容更為詳細。
  • touch : 新建一個檔案 如 touch index.js 就會在當前目錄下新建一個index.js檔案。
  • rm: 刪除一個檔案, rm index.js 就會把index.js檔案刪除。
  • mkdir: 新建一個目錄,就是新建一個資料夾。
  • rm -r : 刪除一個資料夾, rm -r src 刪除src目錄,rm -rf /  切勿在Linux中嘗試!刪除電腦中全部檔案!
  • mv 移動檔案, mv index.html src index.html 是我們要移動的檔案, src 是目標資料夾,當然, 這樣寫,必須保證檔案和目標資料夾在同一目錄下。
  • reset 重新初始化終端/清屏。
  • clear 清屏。
  • history 檢視命令歷史。
  • help 幫助。
  • exit 退出。
  • #表示註釋

2.3、Git配置

所有的配置檔案,其實都儲存在本地!檢視配置 git config -l

 

檢視不同級別的配置檔案:

#檢視系統config
​
git config --system --list
​
#檢視當前使用者(global)配置
​
git config --global  --list

Git相關的配置檔案:

  1. Git\etc\gitconfig :Git 安裝目錄下的 gitconfig --system 系統級
  2. C:\Users\Administrator\ .gitconfig 只適用於當前登入使用者的配置 --global 全域性

 

這裡可以直接編輯配置檔案,通過命令設定後會響應到這裡。

2.4、設定使用者名稱與郵箱(使用者標識,必要)

當你安裝Git後首先要做的事情是設定你的使用者名稱稱和e-mail地址。這是非常重要的,因為每次Git提交都會使用該資訊。它被永遠的嵌入到了你的提交中: 

git config --global user.name "kuangshen"  #名稱
​
git config --global user.email 24736743@qq.com   #郵箱

 只需要做一次這個設定,如果你傳遞了--global 選項,因為Git將總是會使用該資訊來處理你在系統中所做的一切操作。如果你希望在一個特定的專案中使用不同的名稱或e-mail地址,你可以在該專案中執行該命令而不要--global選項。總之--global為全域性配置,不加為某個專案的特定配置。

 


3.Git基本理論(重要)

3.1、三個區域

Git本地有三個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠端的git倉庫(Remote Directory)就可以分為四個工作區域。檔案在這四個區域之間的轉換關係如下:

  •  Workspace:工作區,就是你平時存放專案程式碼的地方
  • Index / Stage:暫存區,用於臨時存放你的改動,事實上它只是一個檔案,儲存即將提交到檔案列表資訊
  • Repository:倉庫區(或本地倉庫),就是安全存放資料的位置,這裡面有你提交到所有版本的資料。其中HEAD指向最新放入倉庫的版本

Remote:遠端倉庫,託管程式碼的伺服器,可以簡單的認為是你專案組中的一臺電腦用於遠端資料交換

本地的三個區域確切的說應該是git倉庫中HEAD指向的版本:

  •  Directory:使用Git管理的一個目錄,也就是一個倉庫,包含我們的工作空間和Git的管理空間。
  •  WorkSpace:需要通過Git進行版本控制的目錄和檔案,這些目錄和檔案組成了工作空間。
  • .git:存放Git管理資訊的目錄,初始化倉庫的時候自動建立。
  • Index/Stage:暫存區,或者叫待提交更新區,在提交進入repo之前,我們可以把所有的更新放在暫存區。
  • Local Repo:本地倉庫,一個存放在本地的版本庫;HEAD會只是當前的開發分支(branch)。
  • Stash:隱藏,是一個工作狀態儲存棧,用於儲存/恢復WorkSpace中的臨時狀態。

3.2、工作流程

git的工作流程一般是這樣的:

1、在工作目錄中新增、修改檔案;

2、將需要進行版本管理的檔案放入暫存區域;

3、將暫存區域的檔案提交到git倉庫。

因此,git管理的檔案有三種狀態:已修改(modified),已暫存(staged),已提交(committed)

 


4.Git專案搭建

4.1、建立工作目錄與常用指令

工作目錄(WorkSpace)一般就是你希望Git幫助你管理的資料夾,可以是你專案的目錄,也可以是一個空目錄,建議不要有中文。日常使用只要記住下圖6個命令:

4.2、本地倉庫搭建

建立本地倉庫的方法有兩種:一種是建立全新的倉庫,另一種是克隆遠端倉庫。

1、建立全新的倉庫,需要用GIT管理的專案的根目錄執行:

# 在當前目錄新建一個Git程式碼庫
​
$ git init

 2、執行後可以看到,僅僅在專案目錄多出了一個.git目錄,關於版本等的所有資訊都在這個目錄裡面。

4.3、克隆遠端倉庫

1、另一種方式是克隆遠端目錄,由於是將遠端伺服器上的倉庫完全映象一份至本地!

# 克隆一個專案和它的整個程式碼歷史(版本資訊)
​
$ git clone [url]  # https://gitee.com/kuangstudy/openclass.git

 2、去 gitee 或者 github 上克隆一個測試!


5.Git檔案操作

5.1、檔案的四種狀態

版本控制就是對檔案的版本控制,要對檔案進行修改、提交等操作,首先要知道檔案當前在什麼狀態,不然可能會提交了現在還不想提交的檔案,或者要提交的檔案沒提交上。

  • Untracked: 未跟蹤, 此檔案在資料夾中, 但並沒有加入到git庫, 不參與版本控制. 通過git add 狀態變為Staged.
  • Unmodify: 檔案已經入庫, 未修改, 即版本庫中的檔案快照內容與資料夾中完全一致. 這種型別的檔案有兩種去處, 如果它被修改, 而變為Modified. 如果使用git rm移出版本庫, 則成為Untracked檔案
  • Modified: 檔案已修改, 僅僅是修改, 並沒有進行其他的操作. 這個檔案也有兩個去處, 通過git add可進入暫存staged狀態, 使用git checkout 則丟棄修改過, 返回到unmodify狀態, 這個git checkout即從庫中取出檔案, 覆蓋當前修改 !
  • Staged: 暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的檔案和本地檔案又變為一致, 檔案為Unmodify狀態. 執行git reset HEAD filename取消暫存, 檔案狀態為Modified

5.2、檢視檔案狀態

上面說檔案有4種狀態,通過如下命令可以檢視到檔案的狀態:

#檢視指定檔案狀態
git status [filename]
​
#檢視所有檔案狀態
git status
​
# git add .                  新增所有檔案到暫存區
​
# git commit -m "訊息內容"    提交暫存區中的內容到本地倉庫 -m 提交資訊

5.3、忽略檔案

有些時候我們不想把某些檔案納入版本控制中,比如資料庫檔案,臨時檔案,設計檔案等

在主目錄下建立".gitignore"檔案,此檔案有如下規則:

  1. 忽略檔案中的空行或以井號(#)開始的行將會被忽略。

  2. 可以使用Linux萬用字元。例如:星號(*)代表任意多個字元,問號(?)代表一個字元,方括號([abc])代表可選字元範圍,大括號({string1,string2,...})代表可選的字串等。

  3. 如果名稱的最前面有一個感嘆號(!),表示例外規則,將不被忽略。

  4. 如果名稱的最前面是一個路徑分隔符(/),表示要忽略的檔案在此目錄下,而子目錄中的檔案不忽略。

  5. 如果名稱的最後面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非檔案(預設檔案或目錄都忽略)

#為註釋
​
*.txt        #忽略所有 .txt結尾的檔案,這樣的話上傳就不會被選中!
​
!lib.txt     #但lib.txt除外
​
/temp        #僅忽略專案根目錄下的TODO檔案,不包括其它目錄temp
​
build/       #忽略build/目錄下的所有檔案
​
doc/*.txt    #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt

 


6.使用碼雲

github 是有牆的,比較慢,在國內的話,我們一般使用 gitee ,公司中有時候會搭建自己的gitlab伺服器。這個其實可以作為大家未來找工作的一個重要資訊!

1、註冊登入碼雲,完善個人資訊

 2、設定本機繫結SSH公鑰,實現免密碼登入!(免密碼登入,這一步挺重要的,碼雲是遠端倉庫,我們是平時工作在本地倉庫!)

# 進入 C:\Users\Administrator\.ssh 目錄
​
​
​
# 生成公鑰
​
​
​
ssh-keygen

3、將公鑰資訊public key 新增到碼雲賬戶中即可!

4、使用碼雲建立一個自己的倉庫!

許可證:開源是否可以隨意轉載,開源但是不能商業使用,不能轉載,... 限制!

 克隆到本地!

 


7.IDEA中整合Git

1、新建專案,繫結git。

 注意觀察idea中的變化

 2、修改檔案,使用IDEA操作git。

  • 新增到暫存區
  • commit 提交
  • push到遠端倉庫

3、提交測試 

 


8.說明:GIT分支

分支在GIT中相對較難,分支就是科幻電影裡面的平行宇宙,如果兩個平行宇宙互不干擾,那對現在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合併了,我們就需要處理一些問題了!

 

git分支中常用指令:

# 列出所有本地分支
git branch
​
# 列出所有遠端分支
git branch -r
​
# 新建一個分支,但依然停留在當前分支
​
git branch [branch-name]
​
# 新建一個分支,並切換到該分支
git checkout -b [branch]
​
# 合併指定分支到當前分支
$ git merge [branch]
​
# 刪除分支
​
$ git branch -d [branch-name]
​
# 刪除遠端分支
$ git push origin --delete [branch-name]
​
$ git branch -dr [remote/branch]

8.1、IDEA中操作

如果同一個檔案在合併分支時都被修改了則會引起衝突:解決的辦法是我們可以修改衝突檔案後重新提交!選擇要保留他的程式碼還是你的程式碼!

master主分支應該非常穩定,用來發布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完後,比如上要釋出,或者說dev分支程式碼穩定後可以合併到主分支master上來。

以上來自狂神視訊,參照網上一些部落格