我使用Git进行Xcode 4项目版本控制。我明确地添加了ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState。xcuserstate到.gitignore,但是Git不会忽略它。有人知道为什么吗?


当前回答

我觉得这样写比较好。

git rm——cache *//UserInterfaceState.xcuserstate**

其他回答

所有答案都很棒,但如果你在不同的Mac(家庭和办公室)上工作,这里有一个会为每个用户删除的答案

git rm --cache */UserInterfaceState.xcuserstate
git commit -m "Never see you again, UserInterfaceState"

只是 "git clean -f -d" 为我工作!

Git可能已经在跟踪该文件。

gitignore文件中写道:

要停止跟踪当前正在跟踪的文件,请使用git rm——cached。

使用这个,用你的信息替换[project]和[username]:

git rm --cached [project].xcodeproj/project.xcworkspace/xcuserdata/[username].xcuserdatad/UserInterfaceState.xcuserstate
git commit -m "Removed file that shouldn't be tracked"

或者你也可以使用-a选项来提交git,这将添加所有被修改或删除的文件。

一旦你从git中删除了这个文件,它就会尊重你的.gitignore。

如果你使用GitHub,这里有一些演示和快捷方式,基本思想是一样的。

1. 像这样打开终端

2. 将下面的命令粘贴到终端,后面加一个空格,然后像这样粘贴.xcuserstate文件的路径

Git rm——缓存

3.确保你有正确的git忽略,然后提交代码:)

这里有一个关于如何递归地从git历史中删除有问题的文件的很好的解释:http://help.github.com/remove-sensitive-data/

非常有用,否则工具在试图显示那些不应该首先检查的巨大文件上的差异时往往会“挂起”……

以下是你可以做的(简而言之)来摆脱最大的东西:

cd YourProject
git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r YourProject.xcodeproj/project.xcworkspace' HEAD
# see what you want to do with your remote here...
# you can: git push origin master --force
# or you can delete it and push a fresh new one from your cleaned-up local...
rm -rf .git/refs/original
git gc --prune=now
git gc --aggressive --prune=now

对我来说非常有用:)