①⓪② Git 版本控制入門(1)

Beginning Git: Ep. 1~ 4,Introduction,Cloning/Creating a Repo,Creating a Remote

Min
11 min readNov 27, 2023

線上課程資源:

以下跟著課程使用 zsh 實做:

Ep. 1 Introduction

Source Control 指將任何種類的檔案,跳回到某個時間點的版本。像是在編輯文字時按下 undo 鍵,就是原始的 Source Control。

Source Control System 的演化史:

CVS(1990年)

SVN / Subversion(2000年)

Git, Mercurial(2005年) 目前最流行 Git

每次 commit 都是將當下的內容快照起來,並記載跟前次版本的差異跟變化。

舉例來說,在 word 裡,自己的原始檔案發給別人後,雙方各自在發出去的版本上更改, word 最後無法合併兩人更改後的版本在一起。

但 version control 可以將兩人各自的修改都匯集成新的版本:merge commit。

術語:

Commit 提交新的專案版本

當下版本的快照。

Diff 比對當前的修改紀錄

一個 commit 到 下一個 commit 之間的變化稱為 diff。

Branch 分支

把 Commit 分出去給其他人改,之後被獨立開發的部分稱為 branch。

Merge 分支合併

Branch 修改後回來跟原本的 Commit 合併

Repository 儲存庫

以上全部的東西稱為儲存庫。

Git VS Subversion

Git 跟 Subversion 很關鍵的不同在,Git 把所有的 Commit 都儲存下來,可以看到專案每個時間點的樣貌。Subversion 則是儲存 Diff,可以看到每個時間點的變化。所以如果想透過 Subversion 看專案指定時期的樣子,就要從頭來一步一步再操作一次,因此 Git 更為實用。

Beginning Git 討論的內容

  • Precursor to “Mastering Git” 這課都會的可以直接去學 Mastering Git
  • Create/clone
  • Committing changes
  • Branching & merging
  • Remotes

Ep. 2 Cloning a Repo

repo = repository

開始一個新的專案,開始版本控制,就是創造一個 Git repo。這下一節講。另一個開始專案的方式,是 clone 一個已經存在的 repo。

專案的變動歷史都儲存在 .git 檔案裡。將專案存在 GitHub、GitLab 或 BitBucket,可以很方便的給其他人存取。Git 內部已具備所有機制,讓你能夠使用遠端儲存庫,只需存放在你擁有 SSH 存取權限的伺服器上。GitHub是一個很大的資料庫,我們能將上面儲存的整個 repository 下載到本機。

Clone VS Remote

從雲端,像 Github 下載 repo 下來的動作,稱為 cloning。下載到本機的 repository 稱為 local repository,或稱為 clone。存在 GitHub 裡的 repository,稱為 remote。

測試自己是否已經有 Git

Terminal 輸入:

git --version

會出現目前 git 的版本:

在 Mac 安裝 Git

brew install git

如果已經在用 Xcode,Git 大多已安裝好。如果沒有 Xcode,可以一鍵安裝 Xcode Command Line Tools 與 Git:

xcode-select --install

更新 Git

brew upgrade git

// Linux 部分跳過

git-scm.com 可下載各 OS 版本的 Git。

實際 clone

範例網頁

  1. 複製repository 的 HTTPS:

2. 回到 Terminal,clone 下來:

git clone 剛剛複製的 URL

3. 比對 repo(rwTODOs 是剛剛 clone 的專案名稱)

cd rwTODOs
ls

git log

顯示最近的 commits

git log 

#按q退出

Fork

因為沒有更改別人專案的權限,把該專案 fork 到自己的 GitHub 帳號之下,讓自己能夠 clone 下來,並變更它,稱作 forking the repo。

在 GitHub fork 範例的 repo

clone 之前先刪除剛剛的clone:

rm -rf rwTODOs

接著再 git clone URL 一次,並在 rwTODOs 資料夾裡看使用者權限。

ls -la 會列出詳細資訊並包含所有文件,包括隱藏的文件和目錄:

ls -la

確認是自己的 fork

git remote -v

Ep. 3 Creating a Repo

開始一個新的 repository 以紀錄更改的歷史。

電腦內的任何一個 directory 都可以轉變成一個 Git Repository。變身之後,會有一個隱藏的 .git 在那個資料夾內。

實際在電腦內創建一個新 Repo

  1. 建立一個新 directory,然後進去
mkdir myTODOs
cd myTODOs

2. 建立一個 git repository

git init
創建了一個空的 Git repository 在 myTODOs 中
ls -la 查詢

3. 到 .git directory 中看看:

cd .git
ls -la

git status

顯示當前Git存儲庫狀態的命令。

回去上一頁,myTODOs,使用 git status 看目前 commit 情況:

git status
我的是寫 No commits yet,影片的版本是 Initial commit

創建一個好的 repository 時,要先附加 read me 跟 licence。

新建 license

choosealicense.com

選擇 MIT License:

most permissive License of the 3 Licenses

把這段文字複製下來:

使用 vim 創造一個檔案 LICENSE,並更改年份與 license 持有者:

1. 年份 2. 持有者

現在用 git status ,看到資料夾裡多了一個 Untracked files:

git add 檔案

開始追蹤紀錄該檔案,等於告訴 Git,我要你在下一個 commit 中包含這個改變:

git add LICENSE

果真,再一次 git status 之後,看到 LISENSE 的新增被記錄起來了。

然後來進行第一次 commit:

git commit

git commit

出現預設畫面,可以留下這次 commit 的訊息,方便之後尋找:

詳細寫明這次的動作

git status 一次,Git 會跟你說沒東西可以 commit 了!

要查看這個 commit,輸入 git log,可以看到這個 commit 的詳細資料:

更改 Git 配置

看所有 Git 配置選項:

git config --list

改名:

git config user.name "新名字"
git config user.email "新的email"

此時新改的名字會出現在最後一行,不會改掉剛剛 list 中的,因為這是 local level。

看 local 配置:

git config --local --list

看 global 配置:

git config --global --list

新建 read me

vim README.md

md 代表 Markdown 的意思,標準的 readme 形式。

在 README 中,先 # 標題,然後新增描述,最後加上作者與推特?(現在是X?)

附上 Medium

git status

git add README.md

git commit

git log

看到目前在 repo 裡有兩個 commits 了:

可以看到 Author 也更改了

下一節把剛剛本機的 repo push到 GitHub。

Ep. 4 Creating a Remote

術語:

本機的 repository 稱為 local copy,存到 GitHub 裡的 repository,稱為 remote。上傳到雲端/存到 GitHub 裡的動作,稱為 Push。從 雲端/ GitHub 將 repo clone 下來的動作,稱為 Pulling。

顯示所有目前設定的 remotes:

git remote -vv

可以看到 remote 紀錄:

如果沒出現東西代表沒有 remote 過。

到 Github 網站,點選右上角 + 選擇 New repository:

然後填好欄位,並按下 Creat repository:

創建之後,進到詳細頁面,複製 HTTP 的 URL:

複製完回到 Terminal

將剛剛的 URL 用 add origin 加到 remote 中:

git remote add origin https://github.com/lebonthe/myTUDOs.git
用 got remote -vv 再檢查一次就發現已經建立了 remote

Push a Remote

--set-upstream 確保本機的 local branch 會追蹤 remote master branch:

git push --set-upstream origin master

輸入完會要你輸入 GitHub 的使用者帳密,不過不能使用密碼登入,而要使用 personal access token:

回到 GitHub,選取頭像之後出現的 Settings:

倒數第三排

到 Tokens 產生新的 Token:

Settings-Developer Settings-Personal access tokens-Tokens (classic)
點右上角 Generate new token
在 Note 輸入名字,然後只選取 repo 就好,拉到最下方 Generate Token,立刻複製剛剛產生的 token

再 push 一次就成功了:

回到 GitHub 可看到 repo,與 LICENSE 、README:

點選 commits 可以看到所有 commits
repo 的歷史記錄

到 Settings 可刪除 repo

接著將第四節的內容練習一遍。使用 GitHub 自動創建 README 跟 LICENSE,再 clone 回本機,再到 README 輸入內容。

以上屬於 Git 的入門部分,下一節將從 Committing Changes 開始:

--

--