2010-07-21 120 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之外。

祝你好运!