Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
什麼是 Git
Git 是一種版本控制軟體,它的運作模式跟 Google 文件、Dropbox 文件相似,能夠允許多位使用者同時編輯、檢視或回溯文件,並且詳實地記錄了修改的歷史紀錄。我們可以將 Git 比喻為一種更為嚴謹的協作文件,在使用 Git 協作文件的時候,每個新的「版本」或「檢查點」(checkpoint)都必須被明確地宣告;並且以「行」作為追蹤的單位,如此一來可以精準得知哪一行程式碼有被更改。
版本控制(Version Control)是軟體工程的開發技巧,透過它可以解決多個協作者針對同一份檔案進行編輯時會遭遇的核心問題:如何確保協作每位成員所持有的檔案能夠方便地同步、維護以及管理。在沒有導入版本控制技巧的工作團隊中,可能會使用電子郵件、隨身碟或者雲端硬碟交流需要協作的檔案,這些工具使用起來固然方便快捷,不過一但檔案開始遭遇到編輯、複製以及重新命名,我們很快就會發現這個專案充斥著重複的資料夾、檔案以及奇怪的命名,對於專案管理員造成很大的麻煩與負擔。因此,基於對效率與嚴謹的需求,版本控制因應而生。
Git 由 Linux 作業系統之父 Linus Torvalds 所發明,作為 Linux 作業系統的核心軟體維護所使用的版本控制軟體,即使有超過一千位開發者寫作程式碼貢獻到這個專案中,依然能夠有效率地被管理。Git 採用分散式版本控制系統,顧名思義就是每個協作者的電腦中都保有完整的專案內容,相較於集中式版本控制系統,分散式這樣的設計除了可以提昇開發效率(不一定要在與中央伺服器連接的情況下工作),也能夠確保專案的安全性(在每一位協作者的電腦中都有一個備份)。
什麼是 GitHub
使用 Git 的團隊會需要一個中央伺服器儲存專案的程式碼,當協作者在自己的電腦完成了檔案的變更之後,就會選擇提交修改後的檔案到中央伺服器,多數的團隊不會建置自己的中央伺服器,會委託專業的團隊管理。
GitHub 就是世界上最大同時也是最受歡迎 Git 中央伺服器委託管理網站,協作者除了能夠將 GitHub 視為程式碼的中央伺服器,也能夠將它視為開發團隊的工作環境,功能包含問題追蹤、維基頁面(Wiki Pages)以及持續性整合和部署,其他提供與 GitHub 類似服務的網站還有 GitLab 以及 BitBucket 等。
安裝 Git
使用 Windows 作業系統的初級約維安需要下載並安裝 Git,點選下方連結就可以下載並安裝。
安裝 Git 的同時也會安裝一個名為 Git Bash 的命令列應用程式,這個應用程式提供讓 Windows 使用者也能夠在命令列輸入與 MacOS、Linux 相同的命令列指令。
忘記了什麼是命令列嗎?複習一下約維安計畫:第二週吧!
使用 macOS 的初級約維安不需要另外安裝 Git 或者命令列應用程式,macOS 預設有安裝 Git 以及內建的終端機應用程式。
開啟 Git Bash(Windows)或者終端機(macOS)輸入以下指令檢視 Git 是否已安裝妥當,其中 ~ 為家目錄的標註、$ 為提示字元,在輸入指令時不用輸入這些符號。
~$ git --version
git version 2.30.0
開始使用 GitHub
我們可以透過 Github 來當作自己的遠端工作環境,來管理自己的程式碼與專案,首先前往 GitHub 並且註冊一個帳號。
完成註冊以後,點選右上角的 + 圖示新增一個儲存庫(New repository),然後自行輸入儲存庫名稱(截圖範例是 a-taste-of-command-line)、儲存庫描述(截圖範例是 A Taste of Command Line.)、勾選公開以及新增一個 Markdown 文件 README.md,按下建立儲存庫(Create repository)按鈕之後就可以成功建立一個遠端儲存庫。
忘記了Markdown 文件是什麼嗎?複習一下約維安計畫:第三週吧!
完成新增儲存庫之後,我們看到在自己的 GitHub 帳號下有了一個儲存庫,在裡面有一個 Markdown 文件 README.md。接著我們將約維安計畫:第二週的部分文章內容改寫為 Markdown 文件,主要是基礎命令一覽,命名為 basic_commands.md,內容如下:
# 約維安計畫:第二週
> 初嘗命令列的滋味。
## 基礎命令一覽
首先,我們將這篇文章會介紹的基礎命令全數列出:
```
pwd # print working directory
mkdir folder_name # make directory
ls # list directory and file
cd folder_name # changing directory
touch file_name # create file
mv file_name file_name # move file
cp file_name file_name # copy file
rm file_name file_name # remove file
rm -r folder_name # remove folder
clear # clear command line, Ctrl-L
# up-arrow / down-arrow for history commands
# tab for auto-completion
# Ctrl-C to stop execution
```
### 印出工作目錄的命令
`pwd`(print working directory)是印出工作目錄的命令,Jupyter 星球預設的起始工作目錄就是所謂的「家目錄」,也就是 /home/jovyan。
### 創造資料夾的命令
`mkdir folder_name`(make directory)是創造資料夾的命令,執行時必須告知新資料夾的名稱。
### 將目前所在工作目錄中的資料夾與檔案都列出來的命令
`ls`(list)是將目前所在工作目錄中的資料夾與檔案都列出來的命令。
### 更換工作目錄的命令
`cd folder_name`(change directory)是更換工作目錄的命令。
在使用 cd 命令更換工作目錄時,我們能夠使用 `cd ..` 表示更換至上一層,`cd ../..` 表示向上更換兩層。同理 `ls ..` 表示列出上一層的資料夾與檔案,`ls ../..` 表示列出向上兩層的資料夾與檔案。
在任何目錄下若是想要切換至特殊工作目錄(例如家目錄 `/home/jovyan` 或者根目錄 `/`)可以直接指定這兩個目錄的名稱:
- 家目錄的名稱:`~`
- 根目錄的名稱:`/`
因此使用 `cd ~` 可以從任何目錄直接更換到家目錄,使用 `cd /` 可以從任何目錄直接更換到根目錄。
### 創造檔案的命令
`touch file_name` 是創造檔案的命令,執行時必須要告知新檔案的名稱以及副檔名。
### 移動檔案的命令
`mv file_name file_name`(move)是移動檔案的命令,執行時必須告知欲移動的檔案名稱、以及移動後更換的檔案名稱,因此也能夠用來進行檔案的重新命名。
### 複製檔案的命令
`cp file_name filename`(copy)是複製檔案的命令,執行時必須告知欲複製的檔案名稱、以及複製後的檔案名稱。
### 移除檔案的命令
`rm file_name`(remove)是移除檔案的命令,執行時必須要告知欲移除檔案的名稱以及副檔名。
### 移除資料夾的命令
在移除檔案的命令 `rm` 加入參數 `-r` 就變成能夠移除資料夾的命令,執行時必須要告知欲移除資料夾的名稱。
### 清除目前畫面的命令
clear 是清除命令列目前畫面的命令,也可以用快捷鍵 Ctrl-L 來達成相同目的。
除了前述這些基礎的命令,在使用命令列的時候也能善用一些快捷鍵加快效率,像是透過「上」與「下」的箭頭瀏覽曾經執行過的指令、透過 Tab 鍵自動完成供使用者快速輸入以及透過 Ctrl-C 來中斷執行中的應用程式等。
完成 basic_commands.md 的寫作之後,在剛才新增的儲存庫按下添加檔案(Add file)>(上傳檔案)Upload files。
指定寫作完成的 basic_commands.md,撰寫一則簡短的提交訊息(Commit message),然後點選提交(Commit changes),如此就完成了專案的第一個提交!由於 GitHub 支援 Markdown 輕量標記語言的渲染(Render),在 GitHub 瀏覽儲存庫中的 Markdown 文件時就能夠看到具有樣式與結構的外觀。
https://github.com/datainpoint/a-taste-of-command-line/blob/main/basic_commands.md
最後,開啟 Git Bash(Windows)或者終端機(macOS)輸入以下指令將遠端儲存庫複製一份到電腦中,成為一個本地儲存庫,其中遠端儲存庫的網址可以點選右上角的 Code > Copy 圖示複製。
~$ git clone <YOUR-REPOSITORY-URL>
這樣一來,我們就能夠在自己的電腦中也保有一份與遠端儲存庫相同的專案,實踐分散式版本控制系統的精神。
在初嘗 Git 與 GitHub 的滋味之後,約維安計畫:第四週來到尾聲,希望您也和我一樣期待下一篇文章。
延伸閱讀
對於這篇文章有什麼想法呢?喜歡😻、留言🙋或者分享🙌