Git詳解

wydilearn 發表於 2022-05-22
Git

目錄

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

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

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

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

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

Git詳解

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

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 

Git詳解

 集中版本控制 (svn)

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

Git詳解

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

分散式版本控制 Git 

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

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

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

Git詳解

 Git與SVN的主要區別

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

Git詳解

 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!

Git詳解

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

 


2.Git軟體下載

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

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

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

Git詳解

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

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

2.1、啟動Git

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

Git詳解

 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

 

Git詳解

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

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

Git相關的配置檔案:

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

 

Git詳解

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

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

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

git config --global user.name "kuangshen"  #名稱
​
git config --global user.email [email protected]   #郵箱

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

Git詳解

 


3.Git基本理論(重要)

3.1、三個區域

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

Git詳解

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

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

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

Git詳解

  •  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)

Git詳解

 


4.Git專案搭建

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

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

Git詳解

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、註冊登入碼雲,完善個人資訊

Git詳解

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

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

Git詳解

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

Git詳解

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

Git詳解

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

Git詳解

 克隆到本地!

Git詳解

 


7.IDEA中整合Git

1、新建專案,繫結git。

Git詳解

 注意觀察idea中的變化

Git詳解

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

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

3、提交測試 

Git詳解

 


8.說明:GIT分支

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

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中操作

Git詳解

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

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

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