無廢話Git——概念與本地伺服器提交

oscar999發表於2020-04-06

Git是什麼?

Git是一個開源的分散式版本控制系統(也可以叫工具或是軟體)。
版本控管工具對於開發人員來說不陌生, 像VSS,CVS,SVN,Perforce等。關於程式碼的版本控管工具及歷史, 可以參考:
程式碼控管工具比較

版本管理器的發展史

集中式與分散式

與其他的版本控管工具相比, Git 最大的特點就是分散式。
與分散式對應的是集中式, 也就是伺服器-客戶端的模式。這種模式的特點是有一臺中央的程式碼控管伺服器, 不同的開發機器作為客戶端從伺服器獲取程式碼和進行程式碼提交。

而對於分散式的Git來說, 每個客戶端的機器都可以作為程式碼控管的伺服器, 可以進行程式碼的檢出和上傳。
但是, Git 也有中央伺服器的概念,而且在大部分的狀況下都會使用到中央伺服器。

對於習慣集中式程式碼控管工具的開發者來說(比如Perforce), 可以這樣來理解集中式:如果在每臺機器的本地安裝一個Perforce 伺服器, 再到一臺共用的伺服器上架設一臺Perforce伺服器作為中央伺服器。程式碼先提交到本地的伺服器, 再從本地的伺服器彙總到中央伺服器。只是Perforce等工具沒有這樣的功能, Git 做到了。

因為本地也是伺服器, 也可以進行提交等動作, 所以不聯網也可以進行程式碼的提交和控管, 等到網路恢復才推送到中央伺服器。除此,Git 還支援多種協議和提交方式, 在一些Git的平臺上可以使用網頁的方式進行程式碼改動,提交和管理。

Git 的獲取與安裝

Git官方下載站點: https://git-scm.com/downloads
提供了Mac, Windows 和Linux三種版本。 目前最新版本是2.18.0.
以下介紹在Windows下的安裝和使用。
Windows 下下載的是.exe的可執行檔案, 直接雙擊安裝。
安裝完成,會有以下三個選單項:

  1. Git Bash Linux 命令列方式。 因為Git 最早是應用於Linux,有些命令需要在這個下面才能執行。
  2. Git CMD Window命令列方式。一般的Clone, init, add, commit等命令都可以使用這個方式執行。
  3. Git GUI 如果對命令列不感冒的話, 可以使用介面的方式來使用Git.

接下來,不考慮遠端服務,僅在本地伺服器中使用 Git.

本地伺服器中使用Git

開始使用之前, 先配置一下使用者名稱和郵箱。這個是作為提交程式碼的使用者標識。
gitconfigglobaluser.nametest

git config –global user.name ‘test’
git config –global user.email test@oscar.com

Git CMD方式:
1. 在D盤中建立如下目錄:
D:\gitworkspace\project1

  1. 進入Git CMD, 切換到以上目錄。

  2. 執行Git Init
    Init 是建立新的 Git 倉庫, 執行完成之後,目錄中會多出一個 .git 的隱藏資料夾。
    有了這個目錄,就說明這個目錄下的程式碼進行了程式碼控管。

  3. 在目錄中新增一個檔案 file1.txt
    內容: first Line

  4. 回到Git CMD, 輸入:git status
    git status 命令用於檢視是否有修改
    可以看到 Untracked files: file1.txt .
    意思就是file1.txt這個檔案沒有被跟蹤。

  5. 在Git CMD輸入: git add file1.txt
    git add, 將該檔案新增到快取
    git add 並不是直接提交程式碼到程式碼庫, 而是先放到一個快取區塊。
    類似電腦儲存, 不是直接寫到硬碟,而是先放到快取。 如果要撤銷的話, 可以使用git rm 命名進行移除。
    這裡也可以使用git status檢視一下狀態。
    Changes to be committed: 有新的改動需要提交。
    如何真正提交到庫, 接下來就是.

    1. 在Git CMD輸入: git commit -m “file1 add”
      -m 和後面雙引號的內容是提交需要給一些註釋。實際開發中這個註釋可能是規格標號或是任務標號。

到此, 新增一個檔案並提交到本地庫就可以了。如果對這個檔案進行修改, 比如增加一行內容:
second Line.
先使用git status 檢視一下改變,
modified: file1.txt 有檔案發生了改動。
接下來同樣使用
-git add file1.txt
-git commit -m “file1 modify”
進行提交。

Git GUI方式:
1. 在D盤中另外再建立一個目錄:
D:\gitworkspace\project2
2. 開啟Git GUI
3. 點選 “Create New Repository”
選擇上面的目錄路徑後, 點選Create按鈕
到project2目錄上看一下, 和使用init 命令列一樣, 同樣產 生了一個 .git 的隱藏資料夾。
4. 同樣是在目錄中新增一個檔案 file1.txt
內容: first Line
5.在Git GUI中點選一下 Rescan按鈕。
這個按鈕的作用就是掃描目錄下是否有檔案發生了變更。
6. 在Unstaged Changes區塊就顯示了 file1.txt
7. 點選 Stage Changed按鈕, 把這個檔案放入快取區。
8. 在Initial Commit message輸入註釋“file1 add”後, 點選Commit提交改動到本地庫。

改動檔案和新增檔案的操作大致類似。至此, Git GUI就完成了上述使用CMD方式同樣的操作。

暫存區(快取區)

上面提交程式碼操作上, 有一個快取區的概念。 也叫做暫存區。 英文常見叫做Stage , 也有稱作Index的。這是Git和SVN,Perforce等其他版本控管工具的一個大的不同之處。
開始介紹暫存區之前, 順便了解一下其他的術語。

工作區:就是本地工作的目錄, 也就是上面的project1, project2的目錄, 但是不包括 .git的隱藏目錄。
版本庫: 就是 .git 的隱藏目錄。

好了, 看一張圖:

這裡寫圖片描述

  1. git add 把改動放到暫存區
  2. git commit 提交到版本庫
  3. 只有Commit才會才是版本號, 暫存區的檔案可以通過:
    git reset HEAD – filename
    撤回到工作區。

關於Git完整介紹,可以參考筆者的以下連結:
Git輕快學練戰


相關文章