Last Updated on 2022-02-22 by Clay
我認為,工程師撰寫程式的最終目的是為了讓這個世界更便利。不論是什麼樣的產品,程式碼上的改動都是在所難免;可能是程式出了 BUG、可能使用者需要有個更簡潔的按鈕、甚至可能只是工程師私心希望能夠提升程式碼可讀性。
而每一次程式碼的異動,都必須背負著一定程度的改壞程式的風險。為了規避這種風險,我們可能會想到要事先將程式『備份』。然而,隨著專案規模的越來越大、或是與他人協力共同開發,單純地替程式碼備份變成了一件容易讓人手忙腳亂出錯的任務。
於是,『版本控制』(version control)的需求就這樣誕生了。(相關的發展歷史與工具可以參考 Wiki)
我今天主要紀錄的,則是當今可說是最主流的 git 以及 GitHub。希望這篇筆記能寫得夠清楚。
git 和 GitHub 究竟是什麼呢?
git 是一個分散式的版本控制軟體,它最早的開發者同時也就是 Linux 作業系統的開發者 Linus Torvalds,可謂是大有來頭。如今 git 已經可以很輕易地在 Linux、Mac OS、Windows 等作業系統的命令列模式中執行,替我們各種本地專案進行版本控制。
那 GitHub 是什麼?剛開始學習的時候,很多人會以為 git 就是 GitHub、GitHub 就是 git,我不只一次地被剛學習版本控制的朋友問道:「欸,你會不會使用 GitHub 指令啊?」—— 然而實際上兩者是截然不同的。
GitHub 是可以通過 git 來進行版本控制的原始碼託管平台,也是世界上最大的程式碼託管網站以及開源社群。
git 是工具,GitHub 是個線上託管的平台。但兩者一起使用是相當方便的。以下就來紀錄該如何使用吧。
使用 git 和 GitHub 進行版本控制
以下按照操作流程一步步紀錄:
- 安裝 git
- 註冊 GitHub 帳號
- 設定 GitHub 金鑰
- 建立第一個專案
- 使用 git 指令將本地端倉庫與遠端倉庫同步(git add、git commit、git push)
其實就算是這樣,在使用 git 上還是有許多沒能紀錄到的部分,不過本篇僅僅只是紀錄該如何簡單地使用 git 進行版本控制,這樣應該算多多少少都有提及到了。
安裝 git
Linux (Debian/Ubuntu)
你可以在終端機中,使用:
sudo apt install git
來進行安裝。
Linux (Fedora)
yum install git-core
Mac OS
brew install git
Windows
Windows 系統大概是相對比較麻煩的了。
- 前往官網:https://git-scm.com/
- 點擊下載按鈕
- 雙擊啟動安裝檔完成安裝
- 可以在開始列打開 CMD 或 PowerShell
- 可以在命令列使用 git 工具
無論使用哪種作業系統,安裝完畢後,我們在命令列模式中,輸入以下指令來設定帳號跟電子郵件:
git config --global user.name "<user_name>"
git config --global user.email "<user_email>"
註冊 GitHub 帳號
為了要能夠在雲端備份、託管自己的專案(程式碼),我們必須在 GitHub 有自己的帳號。別擔心,建立倉庫等等都是免費的!
GitHub 的網址:https://github.com/
設定 GitHub 金鑰
在我們使用一些 GitHub 的服務時,比方說 git pull
指令,我們為了讓 GitHub 知道我們所使用的裝置確實擁有 GitHub 的帳號權限,我們需要設定 SSH 的金鑰來做認證,私鑰放在本地端,公鑰放在 GitHub 上。
詳細的操作可以參考我以前寫過的這篇文章:[GitHub] 設定 SSH 金鑰步驟紀錄
文字簡化版步驟:
- 在終端機中使用
ssh-keygen
產生公鑰與私鑰 - 私鑰放在使用者家目錄底下的 .ssh/ 資料夾中
- 來到 GitHub 網頁 > 右上角個人圖示開啟選單 > Settings > 左側 SSH and GPG keys > New SSH key > 輸入自定義的 Title 然後在 Key 欄位貼上公鑰(一字不漏)
建立第一個專案
來到 GitHub 網頁後,點擊右上角的 + 符號,選擇 New repository 建立一個新的遠端倉庫。
接著你需要替這個遠端倉庫、也就是你接下來所要開發的專案進行命名與簡單的描述,甚至可以選擇這個倉庫是公開或私人。公開的情況下網路上的所有用戶都可以看見你的倉庫,私人的話你可以設定有誰有權限可以瀏覽。
設定好後,按下 Create repository,現在遠端倉庫已經建立成功了,接著你會看到以下畫面:
這個畫面上分別列出了:新增倉庫、推上一個已經存在的倉庫、從其他倉庫匯入程式碼等三個選項。
下面我們從本機端建立新的倉庫,並與此遠端倉庫進行連結。
使用 git 指令將本地端倉庫與遠端倉庫同步(git add、git commit、git push)
基本上就像 GitHub 上列出來的一樣:
…or create a new repository on the command line
echo "# clay-test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin [email protected]:ccs96307/clay-test.git
git push -u origin main
git init
: 初始化 git 版本控制,會在當前資料夾內建立 .git 隱藏資料夾git add <file_name>
: 開始追蹤特定檔案git commit -m "<message>"
: 將追蹤檔案推入本地保存庫(倉庫)git branch <branch_name>
: 建立分支,在一開始 GitHub 會建議我們建立名為 main 的主要分支git remote add origin [email protected]:<username>/<repository_name>.git
: 將當前本地端 git 版本控制與遠端倉庫連接在一起git push -u origin main
: 將本地端倉庫所保存的文件或程式碼推上 GitHub 遠端倉庫
很單純,現在我實際操作一次。
首先我在我的專案內新增了一個名為 clay-test 的資料夾,在裡頭放入了 hello.py 這份程式。接著我按照以下步驟開始使用 git
進行版本控制。
git init
git add *
git commit -m "It is a test"
git branch -M main
git remote add origin [email protected]:ccs96307/clay-test.git
git push -u origin main
Output:
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 220 bytes | 220.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:ccs96307/clay-test.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
到這一步我們的程式碼已經順利在遠端倉庫中保存了。我們現在重新整理 GitHub 網頁畫面,會看到遠端倉庫的畫面改變了:
到目前為止,我們完成了使用 git
指令在本地端替專案進行版本控制的檔案追蹤、也將程式碼推上了遠端倉庫(再也不用擔心遺失了!),到這邊已經基本上完成了 git 最基本的使用了。
接下來 git 的一些好用、常用的其他指令,會在下篇文章中繼續紀錄。
References
- https://www.atlassian.com/git
- https://git-scm.com/docs/gittutorial
- https://www.atlassian.com/git/tutorials