內容標題

  1. Git 是什麼?
  2. Git 適合誰使用呢?
  3. Git 的歷史
  4. Git 安裝
  5. Git 使用說明
  6. shell 指令
  7. 實際演練
  8. 小結語

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. 方法1
    點進去git官網
  2. 方法2
    打開終端機 (terminal) 並輸入以下指令 (最前面的’$’是代表shell的指令,不用輸入),按 Enter 然後輸入密碼 (使用者登入的密碼)
    $ sudo apt-get update
    $ sudo apt-get install git
    

Mac OS

  1. 方法1
    點進去git官網
  2. 方法2
    這個方法是必較特殊的,是透過 HomeBrew 所下載的。
    而 Homebrew 是一種 Mac 的管理工具,如果還沒安裝過可以將下面這行貼到 terminal (最前面的’$’是代表shell的指令,不用複製)
    $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
    安裝完畢後,接著輸入 (最前面的’$’是代表 shell 的指令,不用複製)
    $ brew install git
    

Git 使用說明

下載完後,就可以把想要的資料夾交給 git 嘍。對於 Windows 的用戶,必須先找到想要的資料夾,並按右鍵,選取 Git Bash here。對於 Mac OSLinux 的用戶,需要用終端機來操控。

基本上 Windows 用戶 打開後會像下圖那樣,那便是終端機(跟其他作業系統的終端機還是不一樣),至於 Mac OSLinux 的用戶直接開啟終端機 (terminal) 就好。


接著來到我們今天的最後part -- 認識 shell 指令。至於為什麼要學習指令,當然是為了要促進我們使用 git 的效率呀!

Shell 指令

  1. 終端機到底是什麼?

    我上面一直說終端機、終端機,所以到底是什麼?

    終端機 是用來輸入和顯示資料的設備,並可運行 Shell

    因此我標題是下 Shell 指令,而不是 terminal喔!因為 terminal 就是一個介面!

  2. Shell 是什麼?

    Shell 是可以處理指令並回傳結果的程式。

    所以說,Shell“Script Language"。因此一定也會有不同的版本。Windows 用戶剛下載完 git 後,內建的是 bashLinux 用戶本身內建 shell 是一樣的 (仍有些許差別)。而對於 Mac OS 會有些不一樣。
    如果是較早期的電腦,內建是 bash,而較新的版本則會是 zsh

  3. 為什麼要學 shell

    一般我們所操控資料的介面都是圖型化介面也作 GUI (Graphical User Iterface) ,而在終端機上操作都是利用指令因此叫 CLI (Command Line Interface) 。這兩種各有優缺點,基本上用 CLI 就是要知道指令,不過使用起來效率極高,能一次處理多筆檔案,而 GUI 則操作簡單,但往往無法一次處理多筆資料。現在為了方便我們能更快使用 git 並且有效率的處理資料,學習 CLI 是有必要的!

  4. 認識 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

實際操作

講得再多,也比不過實際展示!

  1. pwd
    多用在查看自己現在的絕對目錄,可以隨時確認自己是否在正確的路徑。特別是在有兩個相同名的資料夾但在不同的目錄底下時,可以確認自己在哪一個資料夾。
    $ pwd   
    /Users/justin
    
    從上面的資訊可以得到我現在在 Users 這個資料夾底下的 justin 資料夾 (會隨著你所在的資料夾有所不同喔!)。
    Windows 用戶最前面會有 CD,代表你在哪個槽裡面。例如:
    $ pwd
    /d/Users/USER/Desktop/physics
    
    代表說我現在在D槽UsersUSERDesktopphysics 資料夾裡!
  2. 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
    ```

  3. ls
    這個指令就是查看目錄裡有哪些檔案或資料夾。
    例如說我想查看 /Users/justin/Desktop/Data Structure 裡有哪些檔案,輸入 ls 就可以查看了。
    # 查看資料夾內容
    $ ls
    Array ADT   Matrix     Sparse Matrix   String
    Linked List    README.md   Stack
    
    代表在這個資料夾底下有 Array ADT, Matrix, Sparse Matrix, String, Linked List, README.md, Stack 等檔案。
  4. mkdirrmdir
    這兩個指令基本上就是新增跟刪除。例如我想在 /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 testtest, 再用 ls 查看,發現 test 資料夾確實被刪除了。

    那有沒有什麼方法是可以將有檔案的資料夾刪除呢? 有 ! 下一個會介紹! 但千萬記得,利用 shell 指令刪除的檔 案是真的不見了!不會出現在回收桶,因此下指令前要特別小心 (但不要因此而不使用指令喔~)。

  5. touchrm
    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 的世界 ! ! 明天見~

參考資料

  1. 為你自己學 Git (高見龍 著)
  2. missing semester from MIT
  3. What is the difference between Terminal, Console, Shell, and Command Line? (StackExchange)
  4. Git (wikipedia)
#Git #shell







你可能感興趣的文章

使用 Hugo 建立一個 Blog

使用 Hugo 建立一個 Blog

SCSS - map vs list / @for vs @each

SCSS - map vs list / @for vs @each

Web開發學習筆記08 — prototype、__proto__、constructor、Prototype Chain(原型鏈)

Web開發學習筆記08 — prototype、__proto__、constructor、Prototype Chain(原型鏈)






留言討論