9/16/2011

GIT STATUS


git status主要就是用來看目前working directory中所有檔案的情形,主要有下列幾種狀態
1. project file
就是原來就已經在GIT裡面並且沒有被更改過的檔案,這類型的檔案在git status中並不會列出來。
2. modified file
如果你更動任何一個project file,那隻檔案的狀態就會變成modified。
3. untracked file
所有新增出來、還沒用git add加到project裡面的檔案,他們的狀態就會是untracked。
這些檔案裡面可能有你新增的程式,也有可能是你在make的過程中動到或產生的中間檔。
如果是前者,記得在commit之前先add,如果是後者,就不需要理了,就讓它們留在untracked裡面就行了。
4. new file
untracked file被git add之後,狀態就會變成new file,commit之後就變成project file。

git status的output會根據你的color.status來決定要不要讓輸出結果帶有顏色 (或直接設定color.ui為auto)
$ git config --global color.ui auto
or
$ git config --global color.status true
如此一來,git status的output便會有顏色了。(有顏色好看很多)


如果git status後面不加path,會對整個working directory下的檔案檢查;如果後面有加路徑的話,就只會指定路徑下的所有檔案做檢查。
$ git status .
$ git status ./foo

註: 如果你目前不是在.git的同一層目錄的話,git會一直往parent目錄往上找到.git目錄,所以不必特別cd回.git那層目錄就可以做git操作了。

另外,git好像到了1.7.0.4之後,git-status多了幾個參數可以使用,個人最推的是 -s
-s, --short
用簡潔的格式來印出結果
ex.
$ git status
# On branch new
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       new file:   kkkk
#
$ git status -s
A  kkkk

前面的A代表added,另外還有幾個字母
M = modified
D = deleted
R = renamed
C = copied
U = updated but unmerged

最常見的的狀態:
? ?: untracked
A: new
M: Modified but not added
M  : Modified and added
MM: Modified again after added
  D: deleted project file
完整的format可以用git help status查詢OUTPUT那一節,在這裡就不列出來了。

--porcelain
porcelain的翻譯是"瓷" (f-__-),加這個參數的意義是輸出來的結果會讓script較易於處理,不過目前這個參數其實是指到--short,結果是一樣的。
-u[], --untracked-files[=]
這個參數是用來設定如何顯示untracked files的狀態
mode (Default all)
no:     不顯示untracked files
normal: 顯示untracked files & directories,但untracked directories裡面的內容則不列出來
例如,新產生了一個newdir,newdir目錄裡面又有子目錄及其他檔案,在normal mode的時候,在status裡只會列出一行newdir/。
all:    將所有untracked files列出來,包含在untracked directories裡面的,所以用all的話列出來就會是落落長一大串。

-z
用NUL代替LF當成行的結尾,應該也是為了要把結果output給script處理而設計的,和--porcelain搭配使用。

No comments:

Post a Comment