Não é possível ignorar UserInterfaceState.xcuserstate

301

Estou usando o Git para o controle de versão do projeto Xcode 4. Eu adicionei explicitamente ProjectFolder.xcodeproj/project.xcworkspace/xcuserdata/myUserName.xcuserdatad/UserInterfaceState.xcuserstatepara .gitignore, mas Git não vai ignorá-lo. Alguma idéia de por que isso é assim?

GarlicFries
fonte

Respostas:

669

Provavelmente, o Git já está rastreando o arquivo.

Nos documentos do gitignore :

Para parar de rastrear um arquivo atualmente rastreado, use git rm --cached .

Use isso, substituindo [project]e [username]com suas informações:

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

Como alternativa, você pode usar a -aopção git commitque adicionará todos os arquivos que foram modificados ou excluídos.

Depois de remover o arquivo do git, ele respeitará o seu .gitignore.

mate
fonte
3
Eu tenho esse problema, mas quando tento remover o arquivo xcuserstate, ele diz 'não corresponde a nenhum arquivo'. O que está acontecendo?
precisa
Eu tenho o mesmo problema que @RobCaraway
MaxGabriel
24
Isso me ajudou a: 1) sair do xcode; 2) vá para o diretório do projeto e faça um "ls -la" no aplicativo do terminal para garantir que você veja os arquivos .git e .gitignore; 3) altere "ProjectFolder" no exemplo acima para o nome do seu projeto; 4) execute os dois comandos git que matt mostra; 5) Reinicie o XCode, confirme e verifique se o arquivo xcuserstate não está mais listado.
Brainware
1
Alguma idéia de como fazer o equivalente no svn? Estou recebendo o mesmo problema, no qual svn não está ignorando o arquivo
BPN
Obrigado @Brainware !! Finalmente funcionou graças à sua sugestão. Eu acho que fechar o Xcode de antemão é muito importante.
Jay Versluis
52

Caso o arquivo ignorado continue aparecendo na lista não rastreada, você pode usar git clean -f -d para esclarecer as coisas.

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. AVISO primeira tentativa git clean -f -d --dry-run, caso contrário, você poderá perder alterações não confirmadas.

Então: git clean -f -d

Xing
fonte
O github agora fornece um arquivo .gitignore padrão que inclui esse arquivo entre outros, mas você ainda precisa seguir as etapas. chato
cspam
3
Obrigado homens, git clean -f -d acabou de excluir. xcodeproj e outros arquivos do meu projeto ...
Jeremy Luisetti
1
É altamente recomendável usar o sinalizador --dry-run antes de executar o git clean, ou seja, git clean -f -d --dry-run para ver o que acontece
zero0cool
O que git clean -f -dfaz?
allenlinli
Não use as git clean -f -dalterações se você tiver arquivos não confirmados! Eu usei e ele removeu meus arquivos recém-criados com o conteúdo já criado! :) Então, primeiro cometer e, em seguida, limpa
kalafun
44

Todas as respostas são ótimas, mas aqui está a que será removida para todos os usuários, se você trabalhar em diferentes Mac (casa e escritório)

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

Um amigo me mostrou este site incrível https://www.gitignore.io/ . Digite o IDE de sua escolha ou outras opções e ele gerará automaticamente um gitignorearquivo que consiste em ignorantes úteis, um dos quais é o xcuserstate. Você pode visualizar o gitignorearquivo antes de fazer o download.

Josh Valdivieso
fonte
17

Caso o arquivo continue aparecendo mesmo depois de fazer tudo o que foi mencionado aqui, verifique se esta caixa de seleção nas configurações do Xcode está desmarcada:

insira a descrição da imagem aqui

Lukas Kalinski
fonte
14

Apenas "git clean -f -d" funcionou para mim!

rilar
fonte
7

Aqui estão algumas demonstrações e atalhos, se você usa o GitHub, as idéias básicas são as mesmas.

1. Abra o terminal como este

insira a descrição da imagem aqui

2. Cole o comando abaixo no terminal, seguido de um espaço e, em seguida, cole o caminho do arquivo .xcuserstate da seguinte forma:

git rm --cached insira a descrição da imagem aqui

3. Verifique se o git correto é ignorado e, em seguida, confirme o código :)

insira a descrição da imagem aqui

Fangming
fonte
4

Aqui está uma explicação muito boa de como remover os arquivos em questão recursivamente do seu histórico do git: http://help.github.com/remove-sensitive-data/

Muito útil, porque, caso contrário, as ferramentas tendem a 'travar' enquanto tentam mostrar a diferença nesses arquivos enormes que não deveriam ter sido verificados em primeiro lugar ...

Aqui está o que você pode fazer (resumindo) para se livrar das maiores coisas:

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

Trabalhou muito bem para mim :)

Zoran Simic
fonte
2

Para mim nada funcionou, mas isso

adicione esta linha ao seu gitignore

*.xcuserdata
Qadir Hussain
fonte
1

Isso funciona para mim

  1. Abra a pasta que contém o arquivo project.xcworkspacedo projeto no terminal.

  2. Escreva este comando: git rm --cached *xcuserstate

Isso removerá o arquivo.

Mohammed Ali Khaled
fonte
0

Para o xcode 8.3.3, acabei de verificar o código acima e observe que, agora neste caso, temos que mudar os comandos para gostar deste

primeiro, você pode criar um arquivo .gitignore usando

 touch .gitignore

depois disso, você pode excluir todo o arquivo userInterface usando este comando e, usando este comando, ele respeitará o arquivo .gitignore.

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

Eu acho que seria melhor escrever assim.

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

Hanlei
fonte