Не могу игнорировать UserInterfaceState.xcuserstate

301

Я использую Git для контроля версий проекта Xcode 4. Я явно добавил ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstateк .gitignore, но Git это не проигнорирует. Есть идеи, почему это так?

GarlicFries
источник

Ответы:

669

Git, вероятно, уже отслеживает файл.

Из документов Гитиньора :

Чтобы остановить отслеживание файла, который отслеживается в данный момент, используйте 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) выполнить две команды git, которые показывает matt; 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

Xing
источник
Github теперь предоставляет вам файл .gitignore по умолчанию, который включает этот файл среди других, но вам все равно придется пройти через ваши шаги. раздражает
cspam
3
Спасибо мужчинам, git clean -f -d только что удалили. xcodeproj и другие файлы из моего проекта ...
Джереми Луизетти
1
Настоятельно рекомендуется использовать флаг --dry-run перед запуском git clean, т. git clean -f -d --dry-run
Е.
Что делает git clean -f -d?
Алленлинли
Не используйте, git clean -f -dесли у вас есть незафиксированные изменения файлов! Я использовал его, и он удалил мои недавно созданные файлы с уже созданным содержимым! :) Так что сначала
сделай
44

Все ответы отличные, но вот тот, который будет удален для каждого пользователя, если вы работаете на разных Mac (дома и в офисе)

git rm --cache */UserInterfaceState.xcuserstate
git commit -m "Never see you again, UserInterfaceState"
hardikdevios
источник
20

Если бы друг показал мне этот удивительный сайт https://www.gitignore.io/ . Введите IDE по вашему выбору или другие параметры, и он автоматически создаст gitignoreфайл, состоящий из полезных игнорирований, одним из которых является xcuserstate. Вы можете просмотреть gitignoreфайл перед загрузкой.

Джош Вальдивьесо
источник
17

Если файл продолжает обнаруживаться даже после выполнения всего упомянутого здесь, удостоверьтесь, что этот флажок в настройках XCode не отмечен:

введите описание изображения здесь

Лукас Калински
источник
14

Просто "git clean -f -d" работал на меня!

rilar
источник
7

Вот несколько демонстраций и кратких сокращений, если вы используете GitHub, основные идеи те же.

1. Откройте терминал, как это

введите описание изображения здесь

2. Вставьте приведенную ниже команду в терминал, затем введите пробел, а затем вставьте путь к файлу .xcuserstate просто так

git rm --cached введите описание изображения здесь

3. Убедитесь, что у вас есть правильный git ignore, а затем передайте код :)

введите описание изображения здесь

Fangming
источник
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

Работал очень хорошо для меня :)

Зоран Симич
источник
2

У меня ничего не получалось, но это

добавьте эту строку в ваш gitignore

*.xcuserdata
Кадир Хуссейн
источник
1

Это работает для меня

  1. Откройте папку, которая содержит файл проекта project.xcworkspaceиз терминала.

  2. Напишите эту команду: git rm --cached *xcuserstate

Это удалит файл.

Мухаммед Али Халед
источник
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 --cache * / /UserInterfaceState.xcuserstate**

Hanlei
источник