Git不能忽略.gitignore中的某些Xcode文件

6
我是新手,正在使用Git备份我正在开发的iPhone项目。我已经添加了一份文件列表,告诉Git在更新时应该忽略(Xcode文件),但是每当我提交更改时,这个.perspectivev3文件(已在.gitignore中)总是出现。有人知道为什么吗?或者我做错了什么?
谢谢, Zach
这是我的.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

你说的“提交我的更改”是什么意思?只有未被忽略和未被添加的文件才会在“git status”等命令中显示。 - jA_cOp
1
这可能是一个愚蠢的问题,但你之前是否提交过 .perspectivev3 或将其添加到索引中,然后再更新 gitignore 文件? - CB Bailey
3个回答

10

如果它在git状态中一直出现,那么它必须已经被添加或提交过了。

您需要执行以下操作:

  • git rm --cached该文件,以便git status不再列出它(如果它只是被添加但尚未提交)。
  • git rm该文件,如果它之前已经被提交(参见此问题)。

有关 git rm --cached 的建议是不正确的。请参见我的下面回答。 - jpswain
git rm --cached 用于仅从本地存储库中删除文件。这正是我想要做的。 - Josh Woodcock

9
您可以使用

标签


$ git rm --cached ./whatever1.txt

在某些东西已经被版本控制后,如果你想将“whatever1.txt”从git中移除,但保留你的工作树不受干扰,那么只需执行以下操作:

$ 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

当你想要从工作树和git存储库中删除文件时,请使用以下方法。
注意:您可能会使用此方法来从git中删除与IDE相关的特定文件。在此示例中,“whatever1”代表要删除的IDE文件。如果您正在与其他几个人共同开发一个项目,并且将此更改推送到共享存储库,则当他们拉取此更改集时,其“./whatever1”文件将被删除。接收方的简单解决方法是:
$ git checkout 1215ef -- ./file-you-want-to-restore ./another-file ./another-etc

(其中1215ef代表删除前的最后一次提交)

这将恢复那些在拉取之前的最后一次提交中存在的文件。完成此操作后,这些文件将是安全的,不会显示为未提交的状态,因为它们将落入gitignore的排除范围内。

祝好运!


3

.gitignore只适用于未跟踪的文件。如果您已经通过git-add添加了由于.gitignore而未被跟踪的文件,它们仍将成为存储库的一部分。

只需从存储库中删除不再需要的文件:

git rm *.perspectivev3

1
嗨,我确实在将该文件添加到忽略文件之前已经添加了该个棘手的文件。我已删除该文件,当我尝试提交更改时,该文件不再存在,所以你们的建议起作用了。谢谢大家。 - ab217
@Zach Banks 我现在会将其中一篇答案标记为已接受,以便他们获得信用并让其他用户知道问题已解决。 - Edd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接