Git and GitHub
前言
在軟體開發的世界裡,版本控制系統是不可或缺的工具,而Git和GitHub則是其中最熱門的選項。無論你是個人開發還是團隊協作,Git和GitHub都能幫助你更有效地管理程式碼及協作開發,甚至為全球頂尖的專案做出貢獻。這篇文章將簡單介紹Git和GitHub的基本概念跟實作,讓新手能快速上手這兩個強大的工具。
Git介紹
什麼是Git
Git是一個免費、開源的分散式版本控制系統,最初由Linux核心的創始人Linus Torvalds所開發。你可以把它想像成程式碼專用的「時光機」與「協作雲端硬碟」,用來追蹤電腦上檔案的變更,並協調多人之間的開發工作。
什麼是版本控制
寫程式的時候,你可能會有許多創新的想法,但不一定每個都能完美運作,如果沒有版本控制,你就需要在每一次嘗試新的想法時,將整個專案備份來避免整個專案崩潰。在單人工作時這聽起來沒什麼,但當團隊協作時,每個人會在不同時間寫出不同程式碼,如果繼續使用上述的備份方法,會造成整個專案難以管理,這才催生出了版本控制的想法。版本控制簡單說就是專案的「歷史紀錄」,它會記錄每一次程式碼的變更,讓你可以隨時回到先前的版本,或是查看誰在什麼時候修改了什麼內容。
Git的優勢
- 記錄歷史變更:git會詳細記錄所有程式碼的變更(包含修改時間,變更內容,更改者),如果新的程式碼出現嚴重錯誤,你就可以進行「時光倒流」,將程式回歸到先前版本。
- 團隊協作:在團隊開發中,每個人都可以擁有一份完整的專案副本並獨立工作。完成工作後,Git能協助將所有人的程式碼安全地合併在一起,並標註出衝突的地方。
- 多線開發:git可以建立「分支」來開發新功能或修復Bug。在分支上的任何改動都不會影響到主分支,確認分支沒問題後再將其「合併」回主線。
Git的基本術語介紹
核心區塊
- Working Directory(工作目錄):你目前正在電腦上編輯檔案的地方。
- Repository(儲存庫/repo):儲存所有版本及Git歷史紀錄的資料夾,分為「本地端(local)」(你的電腦)與「遠端 (Remote)」(如 GitHub、GitLab)。
- Staging Area/Index(暫存區):當你完成部分修改後,使用
git add將檔案標記為「準備提交」的區域。
基本操作
- status(狀態):查看目前專案的狀態,包含哪些檔案被修改了但還沒加入暫存區,哪些檔案已經加入暫存區但還沒提交。
- Add(加入):將修改內容加入暫存區域。
- Commit(提交):簡單說就是「存檔」,將暫存區的修改儲存到Git的歷史紀錄。
- Push(推送):將本地端的提交(Commit)上傳到遠端儲存庫。
- Pull(拉取):從遠端儲存庫下載最新的提交到本地端。
- Fetch(擷取):同樣是下載遠端更新,但不會自動合併,讓你先檢查遠端有哪些變動。
- Clone(複製):將遠端儲存庫完整複製一份到你的本地端。
分支與合併
- Branch(分支):用來開發新功能或修復Bug的獨立線路。
- Merge(合併):將分支上的修改整合回主線。
- Conflict(衝突):當兩個分支修改了同一行程式碼,Git無法自動決定哪個版本正確,就會產生衝突,需要人工解決。
- Checkout/Switch(切換):在不同的分支之間切換,或是將檔案恢復到先前的狀態。
其他重要術語
- Remote(遠端):指的是託管在網路上的原始碼版本,通常標籤為origin。
- Origin(原始碼):Git預設給遠端儲存庫的名稱。
- Ignore(.gitignore):用來指定哪些檔案或資料夾不應該被Git追蹤。
GitHub介紹
什麼是GitHub
Github是一個基於Git的雲端託管平台,提供了版本控制和協作功能,讓開發者可以輕鬆地管理和分享程式碼。它不僅是一個儲存庫,還提供了許多工具來促進團隊合作、問題追蹤、代碼審查等。
Github提供的服務
- 程式碼託管:提供免費和付費的儲存庫空間,讓開發者可以安全地存放和管理程式碼。
- 協作工具:提供Pull Request、Issue、Project等功能,不僅提供團隊成員協作開發,也能讓外部貢獻者參與專案。
- 自動化與 CI/CD:GitHub Actions讓你可以自動化測試、部署等工作流程,提升開發效率。
- 網站託管:GitHub Pages允許你直接從儲存庫中託管靜態網站,適合用來展示專案或個人作品集。
- 社群與開源:GitHub是全球最大的開源社群,開發者可以輕鬆地找到和參與各種開源專案,分享知識和經驗。
GitHub常見術語介紹
- Repository(儲存庫):GitHub上的專案空間,包含程式碼、文件等內容。
- Issue(議題):用來追蹤專案中的Bug、也可以提出新功能或建議給開發者。
- Fork(分叉):將別人的專案複製到自己的帳號下,讓你可以自由修改而不影響原始專案。
- Pull Request(拉取請求):當你對專案做出修改後,向原始專案提出合併請求,讓維護者審核你的修改。
Git安裝及GitHub註冊
Git安裝
- Windows:使用winget下載,輸入以下指令:
winget install --id Git.Git -e --source winget
- macOS:使用 Xcode 命令列工具安裝,輸入以下指令:
xcode-select --install
- Linux:使用包管理器安裝,根據不同的發行版輸入以下指令:
- Debian/Ubuntu:
sudo apt-get install git
- Fedora:
sudo dnf install git
- Arch Linux:
sudo pacman -S git
- Debian/Ubuntu:
GitHub註冊
- 打開瀏覽器,前往GitHub官網。
- 點擊右上角「Sign up」按鈕,填寫註冊表單。
- 填寫電子郵件,密碼及使用者名稱,然後點擊「Create account」
- 根據提示完成人機驗證
創建你的第一個倉庫
- 登入GitHub後,點擊右上角的「Create repository」。
- 填寫倉庫名稱,填寫倉庫描述(可選),選擇倉庫為公開(Public)或私有(Private),並選擇是否創建README檔案和.gitignore檔案。
- 前往你本地上的專案,首先建立.gitignore檔案,將不需要被Git追蹤的檔案或資料夾加入其中,例如:
# 忽略虛擬環境資料夾
venv/
# 忽略編譯產生的檔案
__pycache__/
*.pyc
# 忽略敏感資訊檔案
config.json
# 忽略環境變數檔案
.env - 在終端機中進入專案資料夾,使用以下指令將專案上傳到GitHub:
# 初始化Git倉庫
git init
# 查看目前專案的狀態
git status
# 將所有檔案加入暫存區
git add .
# 提交修改,並添加提交訊息
git commit -m "Initial commit"
# 將預設分支名稱改為main
git branch -M main
# 將本地倉庫與GitHub倉庫連結
git remote add origin https://github.com/你的帳號/倉庫名稱.git
# 將本地提交推送到GitHub倉庫
git push -u origin main - 現在你應該可以在GitHub上看到你的專案了
在github上協作
Fork(分叉)
當你想要參與一個專案的開發,但沒有寫入權限時,可以使用Fork功能。Fork會在你的GitHub帳號下創建一個原始專案的副本,讓你可以自由地修改和提交更改,而不會影響到原始專案。
如何使用Fork
- 前往你想要參與的專案頁面。
- 點擊右上角的「Fork」按鈕,GitHub會自動在你的帳號下創建一個副本。
- 在你的帳號下找到剛剛Fork的專案,點擊進入。
- 使用Git將Fork的專案Clone到你的本地端:
git clone https://github.com/你的帳號/倉庫名稱.git
- 在本地端進行修改,完成後提交更改:
git add .
git commit -m "你的提交訊息" - 將修改推送到你的Fork專案:
git push origin main
- 回到原始專案頁面,點擊「New pull request」按鈕,選擇你的Fork專案和分支,然後提交Pull Request,等待原始專案的維護者審核和合併。
Pull Request(所以我說PR到底應該怎麼翻譯)
Pull Request是GitHub上的一個功能,允許開發者在Fork的專案中進行修改後,向原始專案提出合併請求。維護者可以審核你的修改,並決定是否將其合併到原始專案中。
如何進行Pull Request
- 在你完成你對Fork專案的修改並推送到GitHub後,前往原始專案頁面。
- 點擊「New pull request」按鈕。
- 在「Compare changes」頁面,選擇你的Fork專案和分支,GitHub會自動比較你的修改與原始專案的差異。
- 確認修改內容無誤後,點擊「Create pull request」。
- 填寫Pull Request的標題和描述,說明你所做的修改和為什麼需要這些修改。
- 點擊「Create pull request」提交你的請求,等待原始專案的維護者審核和合併。
結語
以上是一些基本的Git和GitHub觀念跟操作,當然這只是冰山一角,Git和Github還有很多進階的使用技巧及服務(如GitHub Actions、GitHub Pages等),如果有時間的話考慮再寫個GitHub Pages部屬?
如果新手對指令感到眼花撩亂,現在有很多圖形化的Git工具(如GitHub Desktop、Sourcetree、甚至是VSCode內建的Git功能),都很推薦新手可以使用。