2013-08-16 45 views
4

我必須使用的.git /信息未經跟蹤的一些文件夾和文件/排除:未跟蹤文件仍出現在git的狀態

doc 
*.txt 
doc/*.txt 
doc/somefile.txt 

但是git的狀態說,它仍然是追蹤:

$ git st 
# On branch dev 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: doc/somefile.txt 

其他奇怪的是,LS-文件表明它是未經跟蹤:

$ git ls-files --ignored --exclude-from=.git/info/exclude 
doc/somefile.txt 
$ touch /tmp/xxx 
$ git ls-files --ignored --exclude-from=/tmp/xxx 
$ 

我對Git版本1.8.1.5

所以我斷定我可能誤解的東西或做了錯事。請任何想法嗎?

+0

重複的:http://stackoverflow.com/questions/6964297/untrack-files-from-git – ThanksForAllTheFish

回答

6

既然你是在本地忽略在倉庫裏的文件,你需要告訴你忽略他們

git update-index --assume-unchanged <files to forget> 
+1

這是正確的答案。 @lalebarde,我可以補充說,你並不是'解開'這些文件,你忽略了它們。他們已經被追蹤,因此你必須遵循@Abizern的建議讓git忘記他們。檢查[這個說明](http://source.kohlerville.com/2009/02/untrack-files-in-git/)知道爲什麼'更新index'比'RM --cached' – ThanksForAllTheFish

+0

一個更好的解決方案,命令從來沒有打算解決這種類型的問題,並且使用它本身被git的開發者認爲是一個壞主意。這意味着在某些情況下可以提高性能。 Git會將其視爲承諾文件不會在其下面更改,但在這種情況下根本不會這樣。完成後使用'git stash'可能會導致本地更改丟失。請參閱http://article.gmane.org/gmane.comp.version-control.git/225308。其他情況下也可能存在問題。 – qqx

0

由於文件(S)正在beeing跟蹤,你需要告訴git關於他們無視他們之前給忘了。

git rm --cached doc/somefile.txt

+0

不,那將刪除文件,而不是忽略它們。 – Abizern

+0

哦,我的壞。我忘了'--cached'標誌。 – jlundqvist

3

你需要git rm --cached <file>飯桶。這不會刪除你的工作目錄中的文件,但它會從git cache刪除它,所以它現在會被包括在內。 gitignore

+0

他沒有使用的.gitignore,他使用的.git /信息/排除的是本地資源庫中排除文件。 – Abizern

+0

啊,真的。不過,他確實說'沒有',而不是'忽略',所以這取決於他想用文件做什麼。 –

相關問題