①⓪② Git 版本控制入門(1)
Beginning Git: Ep. 1~ 4,Introduction,Cloning/Creating a Repo,Creating a Remote
線上課程資源:
以下跟著課程使用 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
- 複製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。
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
- 建立一個新 directory,然後進去
mkdir myTODOs
cd myTODOs
2. 建立一個 git repository
git init
3. 到 .git directory 中看看:
cd .git
ls -la
git status
顯示當前Git存儲庫狀態的命令。
回去上一頁,myTODOs,使用 git status 看目前 commit 情況:
git status
創建一個好的 repository 時,要先附加 read me 跟 licence。
新建 license
選擇 MIT License:
把這段文字複製下來:
使用 vim
創造一個檔案 LICENSE,並更改年份與 license 持有者:
現在用 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?)
git status
git add README.md
git commit
git log
看到目前在 repo 裡有兩個 commits 了:
下一節把剛剛本機的 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 紀錄:
到 Github 網站,點選右上角 + 選擇 New repository:
然後填好欄位,並按下 Creat repository:
創建之後,進到詳細頁面,複製 HTTP 的 URL:
將剛剛的 URL 用 add origin 加到 remote 中:
git remote add origin https://github.com/lebonthe/myTUDOs.git
Push a Remote
--set-upstream
確保本機的 local branch 會追蹤 remote master branch:
git push --set-upstream origin master
輸入完會要你輸入 GitHub 的使用者帳密,不過不能使用密碼登入,而要使用 personal access token:
回到 GitHub,選取頭像之後出現的 Settings:
到 Tokens 產生新的 Token:
再 push 一次就成功了:
回到 GitHub 可看到 repo,與 LICENSE 、README:
到 Settings 可刪除 repo
接著將第四節的內容練習一遍。使用 GitHub 自動創建 README 跟 LICENSE,再 clone 回本機,再到 README 輸入內容。
以上屬於 Git 的入門部分,下一節將從 Committing Changes 開始: