Untracked files不想add


$ git status
On branch feature/20160420_complain_630222
Untracked files:
  (use "git add <file>..." to include in what will be committed)

在文件夾中,經常會有些“其他”文件,比如上節課最后提到的,編輯器產生~結尾的備份文件,或者一些臨時文件。又可能,某些文件我們只是在本地使用,並不想提交到遠程的倉庫中被別人看到。但如果我們不跟蹤這些文件,Git會一直很執着地提醒我們工作目錄中有一些未被跟蹤的文件。如果你想清凈一點,就可以通過.gitignore文件忽略你不想看到的文件。

要感受一下忽略文件的效果,首先你得有打算忽略的文件,所以我們強行創建一個叫做readme.txt.tmp的文件,假設它是readme.txt產生的臨時文件。

 

git status 看一下效果,同上節課中一樣,在untracked files里列出了這個文件:

 

# On branch master

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

# readme.txt.tmp

nothing added to commit but untracked files present (use "git add" to track)

 

然后我們在工作目錄中新建一個.gitignore文件,在里面寫上一行:

 

*tmp

 

保存退出,再運行 git status:

 

# On branch master

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

# .gitignore

nothing added to commit but untracked files present (use "git add" to track)

 

readme.txt.tmp文件消失了,untracked files里只剩下剛創建的.gitignore文件。

 

來看一下《Pro Git》里對.gitignore格式規范的解釋:

 

  • 所有空行或者以注釋符號 # 開頭的行都會被 Git 忽略。

  • 可以使用標准的 glob 模式匹配。

  • 匹配模式最后跟反斜杠(/)說明要忽略的是目錄。

  • 要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反。

 

所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式:

星號(*)匹配零個或多個任意字符;

[abc] 匹配任何一個列在方括號中的字符(這個例子要么匹配一個 a,要么匹配一個 b,要么匹配一個 c);

問號(?)只匹配一個任意字符;

如果在方括號中使用短划線分隔兩個字符,表示所有在這兩個字符范圍內的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數字)。

 

所以我們前面寫的 *tmp,就是指忽略所有以tmp結尾的文件。

 

再來看一個 .gitignore 文件的例子:

 

# 此為注釋 – 將被 Git 忽略

# 忽略所有 .a 結尾的文件

*.a

# 但 lib.a 除外

!lib.a

# 僅僅忽略項目根目錄下的 TODO 文件

# 不包括 subdir/TODO

/TODO

# 忽略 build/ 目錄下的所有文件

build/

# 忽略 doc 目錄下的所有 .txt 文件

# 會忽略 doc/notes.txt 

# 但不包括 doc/server/arch.txt

doc/*.txt

 

當然,你也可以把.gitignore文件本身從git中忽略。但我不建議這么做,而是所有協作開發者使用統一的規范,避免有人因為沒寫.gitignore而提交上去一些奇怪的文件。

 

在項目一開始就把.gitignore設置好,不僅是為了好看,也是避免不必要的文件對代碼產生干擾。比如有些需要本地生成的文件,如果放在遠程倉庫中被其他人下載使用,也可能會導致程序無法正常運行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM