內容標題
Git 是什麼?
在開始所有操作以前,我們先來認識一下什麼是 git 吧!
git 是一種版本控制器。
這是一個很常見的說法,但非常的抽象。 畢竟我聽到第一次也是一頭霧水呢哈哈。
我們先來看個例子。
有天,教授公布說要用 C 來寫遊戲。於是阿愷開始在某個資料夾創立他的檔案。他在檔案的開頭寫下他每個版本的時間,以防忘記改錯。 有次,他本來是要改 2月 7日的檔案。結果,他改到了 2月 8日的檔案。於是乎,他又想把他改錯的檔案加到他想要的版本。但 ...他忘了改動哪裡。悲劇從此發生...
從上面例子我們可以知道,這種創立多種檔案來記錄版本的方式很容易忘記自己曾經做過什麼。於是我們需要一種工具來幫助我們管理檔案,換一種說法也就是版本控制器。
Git 適合誰使用呢?
既然是版本控制器,只要是有控制版本需求的人都可以使用。例如說要做專題、紀錄不同的程式碼等都是很好的工具。但還是要常用才會記得~ (我也會忘了很多指令XD)
Git 的歷史
說到 git 的歷史,當然最重要的還是他的作者 Linus Benedict Torvalds 啊!
git 是由 Linus Benedict Torvalds 以十天獨立開發出。在還未開發出 git 時,Linus Benedict Torvalds決定以 Bitkeeper 為 Linux 的版本控制器。但因為 BitKeeper 著作權擁有者決定收回無償使用權,Linus Benedict Torvalds 決定開發出 git。 <改寫自 wikipedia >
另外,Linus Benedict Torvalds 也是 Linux 的開發者喔!
Git 安裝
Windows
點進去 git官網 就可以下載安裝嘍。
Linux
- 方法1
點進去git官網。 - 方法2
打開終端機 (terminal) 並輸入以下指令 (最前面的’$’是代表shell的指令,不用輸入),按 Enter 然後輸入密碼 (使用者登入的密碼)$ sudo apt-get update $ sudo apt-get install git
Mac OS
- 方法1
點進去git官網。 - 方法2
這個方法是必較特殊的,是透過 HomeBrew 所下載的。
而 Homebrew 是一種 Mac 的管理工具,如果還沒安裝過可以將下面這行貼到 terminal (最前面的’$’是代表shell的指令,不用複製)
安裝完畢後,接著輸入 (最前面的’$’是代表 shell 的指令,不用複製)$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install git
Git 使用說明
下載完後,就可以把想要的資料夾交給 git 嘍。對於 Windows 的用戶,必須先找到想要的資料夾,並按右鍵,選取 Git Bash here。對於 Mac OS 和 Linux 的用戶,需要用終端機來操控。
基本上 Windows 用戶 打開後會像下圖那樣,那便是終端機(跟其他作業系統的終端機還是不一樣),至於 Mac OS 跟 Linux 的用戶直接開啟終端機 (terminal) 就好。
接著來到我們今天的最後part -- 認識 shell 指令。至於為什麼要學習指令,當然是為了要促進我們使用 git 的效率呀!
Shell 指令
終端機到底是什麼?
我上面一直說終端機、終端機,所以到底是什麼?
終端機 是用來輸入和顯示資料的設備,並可運行 Shell。
因此我標題是下 Shell 指令,而不是 terminal喔!因為 terminal 就是一個介面!
Shell 是什麼?
Shell 是可以處理指令並回傳結果的程式。
所以說,Shell 是 “Script Language"。因此一定也會有不同的版本。Windows 用戶剛下載完 git 後,內建的是 bash 和 Linux 用戶本身內建 shell 是一樣的 (仍有些許差別)。而對於 Mac OS 會有些不一樣。
如果是較早期的電腦,內建是 bash,而較新的版本則會是 zsh。為什麼要學 shell
一般我們所操控資料的介面都是圖型化介面也作 GUI (Graphical User Iterface) ,而在終端機上操作都是利用指令因此叫 CLI (Command Line Interface) 。這兩種各有優缺點,基本上用 CLI 就是要知道指令,不過使用起來效率極高,能一次處理多筆檔案,而 GUI 則操作簡單,但往往無法一次處理多筆資料。現在為了方便我們能更快使用 git 並且有效率的處理資料,學習 CLI 是有必要的!
認識 Shell 指令
基本上指令的格式大都長得像下面一樣
# command 代表指令,option 代表額外的效果,parameter 代表參數 $ command [-option] parameter1 parameter2 ...
下表是我整理的一些指令,和其對應的功能 (指令非常多,只列出會用到的)。
指令 | 用處 | 對應英文名字 |
---|---|---|
pwd | 顯示當前的工作位置 | Print working directory |
cd pathname | 到達目標資料夾 | Change directory |
ls | 顯示當前資料夾內有什麼東西 | List |
mkdir | 創建資料夾 | Make directory |
rmdir | 刪除資料夾 (資料夾內需無資料) | Remove directory |
touch | 創建檔案 | Touch |
rm | 刪除檔案 | Remove |
實際操作
講得再多,也比不過實際展示!
pwd
多用在查看自己現在的絕對目錄,可以隨時確認自己是否在正確的路徑。特別是在有兩個相同名的資料夾但在不同的目錄底下時,可以確認自己在哪一個資料夾。
從上面的資訊可以得到我現在在 Users 這個資料夾底下的 justin 資料夾 (會隨著你所在的資料夾有所不同喔!)。$ pwd /Users/justin
Windows 用戶最前面會有 C 或 D,代表你在哪個槽裡面。例如:
代表說我現在在D槽的 Users 的 USER 的 Desktop 的 physics 資料夾裡!$ pwd /d/Users/USER/Desktop/physics
cd
首先,利用cd
指令來換取資料夾位置有分 絕對路徑 和 相對路徑。絕對路徑
利用 絕對路徑 來更換位置必須要打出完整的資料夾位置。例如我想從 /Users/justin/Documents 換到 /Users/justin/Desktop 就必須要輸入cd /Users/justin/Desktop
之後再用pwd
來確認位置:# 切換資料夾 $ cd /Users/justin/Desktop # 確認目前位置 $ pwd /Users/justin/Desktop
確實換到了正確的位置。
相對路徑
利用 相對路徑必須在特定的資料夾底下。例如我在在 /Users/justin/Desktop,而我知道這個資料夾底下有 Data Structures 這個資料夾,那我可以單純輸入cd Data\ Structure
就好。# 先確認目前位置 $ pwd /Users/justin/Desktop # 切換到目標資料夾 $ cd Data\ Structure # 確認最終位置 $ pwd /Users/justin/Desktop/Data Structure
不過這裡有個特別的地方 就是為什麼要有個
\
呢?原因就是要讓那個 空格 被認為是連在一起的否則他只會讀到前面的 Data 然後就停止嘍。 例如:$ cd Data Structure cd: string not in pwd: Data
顯示說我資料夾底下沒有 Data 這個目錄。
cd ..
這個指令是用來回到父目錄的,例如我在 /Users/justin/Desktop/Data Structure 輸入cd ..
就會回到 /Users/justin/Desktop。
``` bash
$ pwd
/Users/justin/Desktop/Data Structure
# 切換回上個資料夾
$ cd ..# 確認位置
$ pwd
/Users/justin/Desktop
```ls
這個指令就是查看目錄裡有哪些檔案或資料夾。
例如說我想查看 /Users/justin/Desktop/Data Structure 裡有哪些檔案,輸入ls
就可以查看了。
代表在這個資料夾底下有 Array ADT, Matrix, Sparse Matrix, String, Linked List, README.md, Stack 等檔案。# 查看資料夾內容 $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack
mkdir
和rmdir
這兩個指令基本上就是新增跟刪除。例如我想在 /Users/justin/Desktop/Data Structure 裡新增一個資料夾叫 test ,則要輸入mkdir test
。若要移除則輸入rmdir test
,但前提是 test 資料夾要為空。# 先查看原本內容 $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack # 建立資料夾 $ mkdir test # 查看內容 $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack test # 移除空資料夾 $ rmdir test # 查看內容 $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack
上面的例子是先用
ls
查看當前目錄,此時還未有 test 資料夾。之後用mkdir test
創立 test 資料夾,再用ls
檢查是否創立。輸入rmdir test
將 test, 再用ls
查看,發現 test 資料夾確實被刪除了。那有沒有什麼方法是可以將有檔案的資料夾刪除呢? 有 ! 下一個會介紹! 但千萬記得,利用 shell 指令刪除的檔 案是真的不見了!不會出現在回收桶,因此下指令前要特別小心 (但不要因此而不使用指令喔~)。
touch
和rm
touch
是用在將建立檔案,而rm
則是刪除檔案。例如我想建立 test.cpp 的檔案,則要輸入touch test.cpp
若是要移除,則輸入rm test.cpp
。下面例子的操作模式跟上面一樣。# 查看資料夾內容 $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack # 建立檔案 $ touch test.cpp # 查看資料夾內容 $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack test.cpp # 移除檔案 $ rm test.cpp # 查看資料夾內容 $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack
rm -r [directory name]
這個指令是可以刪除目標資料夾的所有內部檔案包括目標資料夾本身。其中-r
就是 recursive 的意思。但還是再體醒一遍,一定要確認過再下指令!!! 畢竟,刪掉就是刪掉了。
$ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack $ mkdir test $ cd test $ touch hello.txt $ ls hello.txt $ cd .. $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack test $ rm -r test $ ls Array ADT Matrix Sparse Matrix String Linked List README.md Stack
中間進入到 test 資料夾創立 hello.txt 是為了模擬目標資料夾裡有檔案。
小結語
今天稍微帶大家認識 git 是什麼,也介紹一些 shell 的指令。但鮮少提到關於-option
的部分,以後有用到會再分享個大家~。再次體醒,利用 shell 指令刪除的檔案是真的不見了!不會出現在回收桶,因此下指令前要特別小心 ,但不要因此而不使用指令喔~明天要帶大家正式進入 git 的世界 ! ! 明天見~