[Git] 筆記 Ch2 上

  • 265
  • 0
  • Git
  • 2016-04-07

Git 學習筆記的第二章節上集, 包括 取得Git儲存庫(Repository) 以及部份git的基礎指令

取得Git儲存庫(Repository)

方法可分為兩種,分別為”建立”以及”取得”

  • 建立:執行git init;可將目前檔案系統下某一個folder建立git 儲存庫。
$ git init
  • 取得:執行git clone可將Git remote server上複製(Clone)到本地端。(以下以git hub上的專案為例)
$ git clone git://github.com/schacon/grit.git

此指令會建立一個grit目錄來存放,如果要指定這個目錄名稱,可以將想要的本地端目錄名稱在指令後加上:

$ git clone git://github.com/schacon/grit.git mygrit

Git取得的是伺服器端所有的資料複本。 該專案歷史中所有檔案的所有版本都在操作者執行過 git clone 後拉回來。若伺服器的磁碟機損毀,使用者可使用任何一個客戶端的複本還原伺服器為當初取得該複本的狀態

執行更新到Git儲存庫(Repository)

在git儲存庫中的檔案可以分為幾個狀態,分別解釋如下:

  1. 未追蹤(Untracked ): 檔案已被丟入到儲存庫中,但目前檔案未被追縱
  2. 未修改(Unmodified):檔案已被追縱,但未修改
  3. 已修改(Modified):檔案已被修改,與git所記錄的內容不同
  4. 已暫存 (Staged):經過Git add指令,Git暫存檔案已與目前本地端儲存庫相同;staged的檔案會在下次執行git commit 時正式認列其變化。

  • 檢示檔案狀態
$ git status

追蹤新增檔案(由untrack進到staged)

  • $ git add test.txt (指定檔案)
  • $ git add . (將所有異動檔案加入stage) 

Note: 如果一個新檔案被加入到git 後(git add .), 又針對該檔案進行修改, 會發現:

該檔案同時存在staged中,但也同時存在not staged (modified)的情況,此時對git來說其實有兩份檔案,一個是已經staged的text2.txt 及其當時執行git add時的內容,以及修改過後在local repository的檔案。

忽略特定檔案

 

可以在local repository下加入.gitignore這個檔案,讓git將該規則批配的檔案預設當作不追蹤。此檔案撰寫內容可如下:

# 註解,會被忽略。

# 不要追蹤檔名為 .a 結尾的檔案

*.a

# 但是要追蹤 lib.a,即使上方已指定忽略所有的 .a 檔案

!lib.a

# 只忽略根目錄下的 TODO 檔案。 不包含子目錄下的 TODO

/TODO

# 忽略build/目錄下所有檔案

build/

# 忽略doc/notes.txt但不包含doc/server/arch.txt

doc/*.txt

# ignore all .txt files in the doc/ directory

doc/**/*.txt

檢查檔案變動

  • Git Diff : 不帶參數的Git Diff 預設會比對目前工作目錄(working directory)及暫存區域(stage area)的版本,然後顯示尚未被存入暫存區(stage area)的變更 ,所以可以用來查看那些檔案尚未被暫存。
  • Git Diff --cached : 可用--staged代替(於git 1.6.1後) 比對暫存區域(stage)及最後一次提交(commit)的差異;通常在commit 前執行,以確認即將commit的檔案內容及其變化。

提交修改

  • Git Commit : 會叫出在config 下core.editor設定的文字編輯器來撰寫該commit的comment 內容。
  •  Git Commit –m :直接在command上打上該次commit的comment內容。
$ git commit -m "for repository initial"
  • Git Commit –a: t自動將所有已被追蹤且被修改的檔案送到暫存區域並開始提交程序,讓使用者略過git add的步驟。(但新增的檔案並不會自動加入暫存,仍舊要執行git add)。

刪除檔案

Git –rm  $fileName :將檔案從目錄中移除,並且將此刪除變動記錄在暫存區

Rm $fileName: 純碎將檔案從目錄中移除,Git會發現檔案消失; 但此刪除動作未認列至暫存區。

重新命名檔案

$ git mv file_from file_to: 將檔案執行更名並且直接認列至暫存區。

$ git mv README.txt README

此Git –mv指令等同於以下三行

$ mv README.txt README

$ git rm README.txt

$ git add README

 

Reference:

https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository