在開發者愈來愈多的時代,Git 變成一個標配的技術工具,以前的我覺得 Git 是一個容易學的工具,雖然表面上是這樣,但是實際上並不是,因為以前使用圖形化介面的 Git 工具做版本控制,但會使用圖形化介面,不代表就會使用指令做 Git,但說這我們開始來介紹使用 Git 。

※ Git 不等於 GitHub
※ Git 不等於 GitHub
※ Git 不等於 GitHub

很重要所以講三次。

為什麼要版本控制工具?

在我們做任何專案或是報告,一定會分好幾個版本,以報告為例,當你在做初版的文件時將某一段文字刪除,但是到了後面的版本,需要找到以前的那段文字,就需要做到版本控管。

當程式專案的開發者,可能會有多個,但也有可能只有一個,但不管是幾個,版本控制也相對的重要,畢竟在回顧之前寫的程式,會比較方便尋找及回復。

版本控制分成三種

我們這章節最主要講的是 Git ,所以我在分散式標了粗體。

  1. 本地端版本控制 Local Version Control (LVC)
  2. 集中式版本控制 Centralized Version Control (CVC)
  3. 分散式版本控制 Distributed Version Control (DVC)

參考資料:
版本控管VCS-基礎概念,SVN、GIT比較
從集中版本控制到分散式版本控制 - 王建興

認識 Git

Git 是一套免費且開源的分散式版本控制的工具。

Git 版本控制的優點

  • 協同處理
  • 持續性
  • 關聯性
  • 保留歷史紀錄

有哪些支援 Git 服務的倉庫?

以下為 Git 為核心建立的雲端服務平台。

支援 Git 的 GUI 軟體

支援 Git 的 IDE 編輯器

如何安裝 Git ? Windows 10

Git 官網,下載安裝檔(選擇自己系統適合的安裝檔)。

打開安裝檔,之後都下一步

安裝完,按左下角開始 > 找 Git 資料夾 > Git Bash

※ Git Bash 視窗介面是模擬 Linux 終端機,用於 Windows OS系統 模擬 Linux。

輸入指令找尋 Git 的應用程式在哪裡

1
2
$ which git
/mingw64/bin/git

指令列我們來確認 Git 有安裝是否有安裝成功,如果沒有出現版本號,可參考以下狀況解決作法

1
2
$ git --version
git version 2.27.0.windows.1

【狀況解決】

本機右鍵 > 內容 > 進階系統設定 > 進階標籤 > 環境變數按鈕 > 選取系統變數 path > 編輯

確認 Git 是否加入到環境變數

如何將檔案透過 Git 到儲存庫(倉庫)

建立工作目錄與儲存庫的初始化

建立資料夾,並進入

1
2
3
$ mkdir LunchOrder

$ cd LunchOrder

將工作目錄 建立初始化 Git 儲存庫,簡單說,將資料夾交由 Git 託管

1
$ git init

確認是否有 .git 檔案

ls 列出當前目錄下的所有資料夾、檔案(參數:-l 詳細資料, -a 包含隱藏檔案、資料夾)

1
2
$ ls -la
$ ls -l -a
1
2
3
4
5
total 4
drwxr-xr-x 1 username 197121 0 七月 24 17:40 .
drwxr-xr-x 1 username 197121 0 七月 24 17:39 ..
drwxr-xr-x 1 username 197121 0 七月 24 18:43 .git
-rw-r--r-- 1 username 197121 0 七月 24 17:39 index.html

Git初始配置

設定提交後的 作者名稱電子郵件

1
2
$ git config --global user.name "black"
$ git config --global user.email "ya005845@hotmail.com"

查看檔案狀態

1
$ git status

Untracked files 列出 新增或異動(未加入儲存庫)的檔案,檔案皆在 工作目錄 內。

1
2
3
4
5
6
7
8
9
On branch master

No commits yet

Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html

nothing added to commit but untracked files present (use "git add" to track)

將新增或異動的檔案 加入 暫存區

在工作目錄下,將全部未加入儲存庫的檔案,送至暫存區,將這批檔案建立索引。

1
$ git add .

查看本地端檔案異動狀態

1
$ git status

Changes to be committed 代表此批檔案已加入到 暫存區,且編制索引,尚未提交。

1
2
3
4
5
6
7
On branch master

No commits yet

Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html

將暫存區檔看 提交到 本機儲存庫

將異動程式提交到 本機儲存庫
-m--message 的縮寫。

1
$ git commit -m "第一次提交程式"

建立 遠端儲存庫 以GitHub為例

我們將儲存庫命名跟工作目錄名稱一樣,建議 Repository name 跟本機專案名稱是一樣

  • README 可以自述儲存庫的內容資訊。 例如:使用說明、專案敘述等。
  • .gitignore 設定哪些檔案、資料夾,不做版本控制。例如:資料庫帳號密碼、IP、範本等。
  • LICENSE 專案授權方式。

暫時不勾選 README,不選擇 .gitignoreLicense,以預設為主,本機專案為主,以免造成不必要問題。

建立好儲存庫,將產生的儲存庫 URL 複製起來。
※ 這個 URL 是 本機儲存庫 和 遠端儲存庫 的連結

加入遠端儲存庫

1
2
$ git remote add <遠端儲存庫簡稱> <url>
$ git remote add origin https://github.com/dew31794/LunchOrder.git
1
$ git config --global user.username <你的 github 使用者名稱>

將本機儲存庫 Push 到遠端儲存庫

第一次 Push (推送),帶上--set-upstream,本機儲存庫會追蹤遠端儲存庫的 <remote name> <branch name> 分支。

第二次 要做 Push (推送),只需要 git push

1
2
3
$ git push -u <remote name> <branch name>
$ git push -u origin master
$ git push --set-upstream github master #同上
1
2
3
4
5
6
7
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 233 bytes | 233.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/dew31794/LunchOrder.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.


指令大集合

Git詳細指令集

1
2
3
$ git

$ git config

初始化儲存庫(註1)

工作區目錄 建立初始化 Git 儲存庫

1
$ git init

將工作區目錄建立一個裸儲存庫

1
$ git init --bare

參考文件:git init 與 git init –bare 區別

Git 基本資訊設置

設定提交後的 作者名稱電子郵件

1
2
$ git config --global user.name "black"
$ git config --global user.email "ya005845@hotmail.com"

Git 執行狀態

本地端檔案異動狀態

1
$ git status
  • 【未追蹤的檔案】 Untracked files:新的檔案,沒有加到 Git 的版本控管裡。
    • 【將要提交的檔案】 Changes to be committed:在工作目錄(WD)的檔案執行git add後,會放在暫存區(Stage)。這些放在暫存區的檔案狀態便是等待提交囉!
    • 【被更動但尚未要提交的檔案】 Changes not staged for commit:已提交版本後,卻又再次修改,這些檔案會被丟回工作目錄(WD)
    • 【已提交】 Committed:在暫存區(Stage)的檔案執行git commit後,檔案便置於儲存區(Repo),這些放在儲存區的檔案即是已提交的狀態。

Git 提交

1
$ git commit -m "提交說明內容"

比對檔案差異

比較現在檔案與上次 commit 到本機儲存庫的差異

1
$ git diff
標籤: w3HexSchool Git