不能忽略UserInterfaceState.xcuserstate


301

我将Git用于Xcode 4项目版本控制。我已明确添加ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstate.gitignore,但Git不会忽略它。任何想法为什么会这样?

Answers:


668

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

gitignore docs

要停止跟踪当前跟踪的文件,请使用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 commit添加所有已修改或删除的文件。

从git中删除文件后,它将尊重您的.gitignore


3
我有这个问题,但是当我尝试删除xcuserstate文件时,它说“没有匹配任何文件”。这是怎么回事?
罗布·卡拉威

我有与@RobCaraway相同的问题
MaxGabriel

24
这对我有帮助:1)退出xcode;2)转到项目目录,并从终端应用程序执行“ ls -la”,以确保您看到.git和.gitignore文件;3)将上面示例中的“ ProjectFolder”更改为您的项目名称;4)执行matt显示的两个git命令;5)重新启动XCode并进行提交,并确认xcuserstate文件不再列出。
Brainware

1
任何想法如何做SVN等效吗?我遇到了同样的问题,其中svn不会忽略文件
bpn

谢谢@Brainware!感谢您的建议,它终于成功了。我认为事先关闭Xcode非常重要。
杰伊·

52

如果被忽略的文件一直显示在未跟踪列表中,则可以git clean -f -d 用来清除内容。

1。

git rm --cached {YourProjectFolderName}.xcodeproj/project.xcworkspace/xcuserdata/{yourUserName}.xcuserdatad/UserInterfaceState.xcuserstate

2。

git commit -m "Removed file that shouldn't be tracked"

3.警告首先尝试git clean -f -d --dry-run,否则您可能会丢失未提交的更改。

然后: git clean -f -d


github现在为您提供了一个默认的.gitignore文件,其中包括该文件,但您仍然必须执行所有步骤。那种恼人的
cspam

3
谢谢男人,git clean -f -d刚刚删除。xcodeproj和我项目中的其他文件...
Jeremy Luisetti 2015年

1
强烈建议在运行git clean之前使用--dry-run标志,即git clean -f -d --dry-run 查看会发生什么
zero0cool

怎么git clean -f -d办?
allenlinli

git clean -f -d如果您有未提交的文件更改,请不要使用!我用了它,它删除了我的新创建的文件,其中已经创建了内容!:)因此,首先提交然后清理
kalafun

44

所有答案都很不错,但是如果您使用的是其他Mac(家庭和办公室),则此答案将为每个用户删除

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




7

如果您使用GitHub,这是一些演示和捷径,基本思想是相同的。

1.像这样打开终端

在此处输入图片说明

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

git rm --cached 在此处输入图片说明

3.确保您具有正确的gitignore,然后提交代码:)

在此处输入图片说明


4

这是一个很好的解释,说明如何从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

对我来说非常好:)




0

对于xcode 8.3.3,我刚刚检查了上面的代码并观察到,现在在这种情况下,我们必须将命令更改为这样

首先,您可以使用创建一个.gitignore文件

 touch .gitignore

之后,您可以使用此命令删除所有userInterface文件,并且通过使用此命令,它将尊重您的.gitignore文件。

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

-1

我认为这样写会更好。

git rm-缓存* / /UserInterfaceState.xcuserstate**

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.