2010-07-21 124 views
5

我是Git的新手,我正在使用它來備份我正在處理的iPhone項目。 當我更新時,我添加了一個Git應該忽略的文件列表(xcode文件),但是當我去提交我的更改時,這個.perspectivev3(它在我的.gitignore中)文件不斷顯示。有人知道這是爲什麼,或者我做錯了什麼?Git不忽略.gitignore中的某些Xcode文件

感謝,

扎克

這是在我的.gitignore文件:

# xcode noise 
*.mode1v3 
*.pbxuser 
*.perspective 
*.perspectivev3 
*.pyc 
*~.nib/ 
build/* 

# Textmate - if you build your xcode projects with it 
*.tm_build_errors 

# old skool 
.svn 

# osx noise 
.DS_Store 
profile 
+0

你是什麼意思「去提交我的更改」?不被忽略的未添加文件只會顯示「git status」等等 – 2010-07-21 06:26:33

+1

這可能是一個愚蠢的問題,但是您之前是否曾經提交.perspectivev3,或者在更新gitignore文件之前將其添加到了索引中? – 2010-07-21 06:28:39

回答

9

如果繼續顯示在git的狀態時,它必須被添加或之前提交。

您需要

  • git rm --cached這個文件,爲了使git status爲不列出它了(這是剛添加的,但還沒有被提交)。
  • git rm這個文件,如果以前承諾(見this question for instance
+0

有關git rm --cached的建議不正確。請參閱下面的答案。 – jpswain 2011-07-19 23:53:45

+0

git rm --cached僅用於從本地回購中刪除文件。這正是我想要做的 – 2015-03-29 14:22:24

3

的.gitignore只適用於未跟蹤文件。如果你有git-add'ed文件,這些文件因爲.gitignore而未被跟蹤,它們仍然是存儲庫的一部分。

只需刪除從庫中的文件,你不想再:

git rm *.perspectivev3 
+1

嘿,我在將它添加到忽略文件之前添加了該討厭的文件。我刪除了該文件,當我嘗試提交更改時,該文件不再存在,所以您的建議奏效。多謝你們。 – agentbanks217 2010-07-21 08:19:28

+0

@Zach銀行我現在將其中的一個答案標記爲已接受,所以他們得到了信用,其他用戶知道問題已解決。 – Edd 2010-07-21 11:03:54

8

您可以使用

$ git rm --cached ./whatever1.txt

後的東西已經是版本控制之下。

事實上,如果你的版本控制之下「whatever1.txt」,你想從混帳刪除它,但離開你的工作樹原狀,那麼就這樣做:

$ git rm --cached ./whatever1.txt 
$ echo /whatever1.txt >> ${PROJECT_ROOT}/.gitignore 
$ git status # this will now show ./whatever1 as "deleted" (from git, not your working tree, and will show gitignore as modified or created) 
$ git commit -a 

這就是它。

只有當你想從兩個工作樹的混帳回購協議中刪除文件使用

$ git rm

CAVEAT:您可能會使用這種方法是從git中刪除特定於IDE的文件。在這個例子中,「whatever1」表示您要刪除的IDE文件。如果您正在與幾個人一起開發一個項目,並且將這個變更集推送到共享倉庫,那麼他們的「./whatever1」文件將在他們提取這個變更集時被刪除。最簡單的事情,從這裏做的人在接收端是:

$ git checkout 1215ef -- ./file-you-want-to-restore ./another-file ./another-etc 

(其中1215ef表示最後刪除前提交)

這有恢復那些存在於文件的效果他們在拉前的最後一次提交。這些文件完成後,這些文件將是安全的,不會顯示爲未提交的B/C,它們將被排除在gitignore之外。

祝你好運!