Git ignorar arquivo para projetos Xcode


Respostas:


693

Eu estava usando a resposta mais votada anteriormente, mas ela precisa de um pouco de limpeza, então aqui é refeito para o Xcode 4, com algumas melhorias.

Eu pesquisei todos os arquivos desta lista, mas vários deles não existem na documentação oficial do Xcode da Apple, então tive que entrar nas listas de discussão da Apple.

A Apple continua adicionando arquivos não documentados, potencialmente corrompendo nossos projetos ao vivo. Este IMHO é inaceitável, e agora comecei a registrar bugs contra ele cada vez que o fazem. Eu sei que eles não se importam, mas talvez isso envergonhe um deles em tratar os desenvolvedores de maneira mais justa.


Se você precisar personalizar, aqui está uma essência que você pode bifurcar: https://gist.github.com/3786883


#########################
# .gitignore file for Xcode4 and Xcode5 Source projects
#
# Apple bugs, waiting for Apple to fix/respond:
#
#    15564624 - what does the xccheckout file in Xcode5 do? Where's the documentation?
#
# Version 2.6
# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects
#
# 2015 updates:
# - Fixed typo in "xccheckout" line - thanks to @lyck for pointing it out!
# - Fixed the .idea optional ignore. Thanks to @hashier for pointing this out
# - Finally added "xccheckout" to the ignore. Apple still refuses to answer support requests about this, but in practice it seems you should ignore it.
# - minor tweaks from Jona and Coeur (slightly more precise xc* filtering/names)
# 2014 updates:
# - appended non-standard items DISABLED by default (uncomment if you use those tools)
# - removed the edit that an SO.com moderator made without bothering to ask me
# - researched CocoaPods .lock more carefully, thanks to Gokhan Celiker
# 2013 updates:
# - fixed the broken "save personal Schemes"
# - added line-by-line explanations for EVERYTHING (some were missing)
#
# NB: if you are storing "built" products, this WILL NOT WORK,
# and you should use a different .gitignore (or none at all)
# This file is for SOURCE projects, where there are many extra
# files that we want to exclude
#
#########################

#####
# OS X temporary files that should never be committed
#
# c.f. http://www.westwind.com/reference/os-x/invisibles.html

.DS_Store

# c.f. http://www.westwind.com/reference/os-x/invisibles.html

.Trashes

# c.f. http://www.westwind.com/reference/os-x/invisibles.html

*.swp

#
# *.lock - this is used and abused by many editors for many different things.
#    For the main ones I use (e.g. Eclipse), it should be excluded
#    from source-control, but YMMV.
#   (lock files are usually local-only file-synchronization on the local FS that should NOT go in git)
# c.f. the "OPTIONAL" section at bottom though, for tool-specific variations!
#
# In particular, if you're using CocoaPods, you'll want to comment-out this line:
*.lock


#
# profile - REMOVED temporarily (on double-checking, I can't find it in OS X docs?)
#profile


####
# Xcode temporary files that should never be committed
# 
# NB: NIB/XIB files still exist even on Storyboard projects, so we want this...

*~.nib


####
# Xcode build files -
#
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData"

DerivedData/

# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build"

build/


#####
# Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups)
#
# This is complicated:
#
# SOMETIMES you need to put this file in version control.
# Apple designed it poorly - if you use "custom executables", they are
#  saved in this file.
# 99% of projects do NOT use those, so they do NOT want to version control this file.
#  ..but if you're in the 1%, comment out the line "*.pbxuser"

# .pbxuser: http://lists.apple.com/archives/xcode-users/2004/Jan/msg00193.html

*.pbxuser

# .mode1v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html

*.mode1v3

# .mode2v3: http://lists.apple.com/archives/xcode-users/2007/Oct/msg00465.html

*.mode2v3

# .perspectivev3: http://stackoverflow.com/questions/5223297/xcode-projects-what-is-a-perspectivev3-file

*.perspectivev3

#    NB: also, whitelist the default ones, some projects need to use these
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3


####
# Xcode 4 - semi-personal settings
#
# Apple Shared data that Apple put in the wrong folder
# c.f. http://stackoverflow.com/a/19260712/153422
#     FROM ANSWER: Apple says "don't ignore it"
#     FROM COMMENTS: Apple is wrong; Apple code is too buggy to trust; there are no known negative side-effects to ignoring Apple's unofficial advice and instead doing the thing that actively fixes bugs in Xcode
# Up to you, but ... current advice: ignore it.
*.xccheckout

#
#
# OPTION 1: ---------------------------------
#     throw away ALL personal settings (including custom schemes!
#     - unless they are "shared")
# As per build/ and DerivedData/, this ought to have a trailing slash
#
# NB: this is exclusive with OPTION 2 below
xcuserdata/

# OPTION 2: ---------------------------------
#     get rid of ALL personal settings, but KEEP SOME OF THEM
#     - NB: you must manually uncomment the bits you want to keep
#
# NB: this *requires* git v1.8.2 or above; you may need to upgrade to latest OS X,
#    or manually install git over the top of the OS X version
# NB: this is exclusive with OPTION 1 above
#
#xcuserdata/**/*

#     (requires option 2 above): Personal Schemes
#
#!xcuserdata/**/xcschemes/*

####
# Xcode 4 workspaces - more detailed
#
# Workspaces are important! They are a core feature of Xcode - don't exclude them :)
#
# Workspace layout is quite spammy. For reference:
#
# /(root)/
#   /(project-name).xcodeproj/
#     project.pbxproj
#     /project.xcworkspace/
#       contents.xcworkspacedata
#       /xcuserdata/
#         /(your name)/xcuserdatad/
#           UserInterfaceState.xcuserstate
#     /xcshareddata/
#       /xcschemes/
#         (shared scheme name).xcscheme
#     /xcuserdata/
#       /(your name)/xcuserdatad/
#         (private scheme).xcscheme
#         xcschememanagement.plist
#
#

####
# Xcode 4 - Deprecated classes
#
# Allegedly, if you manually "deprecate" your classes, they get moved here.
#
# We're using source-control, so this is a "feature" that we do not want!

*.moved-aside

####
# OPTIONAL: Some well-known tools that people use side-by-side with Xcode / iOS development
#
# NB: I'd rather not include these here, but gitignore's design is weak and doesn't allow
#     modular gitignore: you have to put EVERYTHING in one file.
#
# COCOAPODS:
#
# c.f. http://guides.cocoapods.org/using/using-cocoapods.html#what-is-a-podfilelock
# c.f. http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
#!Podfile.lock
#
# RUBY:
#
# c.f. http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
#
#!Gemfile.lock
#
# IDEA:
#
# c.f. https://www.jetbrains.com/objc/help/managing-projects-under-version-control.html?search=workspace.xml
# 
#.idea/workspace.xml
#
# TEXTMATE:
#
# -- UNVERIFIED: c.f. http://stackoverflow.com/a/50283/153422
#
#tm_build_errors

####
# UNKNOWN: recommended by others, but I can't discover what these files are
#

61
Você não deve ignorar *.lockou Podfile.lock(não importa a redundância). Você quer exatamente as mesmas versões instaladas em todos os espaços de trabalho, não deseja a "versão mais recente".
Tvon 17/04

8
Eu removi a parte do Podfile. Eu não adicionei isso originalmente, o SO diz que alguém adicionou e eu copiei / colei descuidadamente na essência. Peço desculpas por toda e qualquer confusão e mal-entendido. Eu realmente não gosto da maneira StackOverflow permite que qualquer pessoa editar suas respostas :(.
Adam

5
Agora existe uma linha de explicação para TUDO, linha por linha. Isso deve tornar muito mais claro e facilitar a personalização para seus próprios projetos.
19413 Adam

3
@ Adam Como posso ver, esse arquivo contém metadados VCS e, portanto, não deve ser verificado no VCS. Não, não há menções developer.apple.comsobre xccheckout. Mas na página oficial do github, esse arquivo já está incluído no arquivo gitignore. https://github.com/github/gitignore/blob/master/Objective-C.gitignore
skywinder

3
Sem descrição oficial, não vamos ignorar nada. Quase toda vez que as pessoas fazem isso, ele corrompe o projeto de alguém, mais cedo ou mais tarde. Muito perigoso - não vá lá. Por isso, recuso-me a adicionar qualquer coisa a esse arquivo, a menos que eu tenha uma fonte verificável confirmando que é seguro ignorar!
Adam

276

Com base neste guia do Mercurial, meu .gitignore inclui:

.DS_Store
*.swp
*~.nib

build/

*.pbxuser
*.perspective
*.perspectivev3

Também escolhi incluir:

*.mode1v3
*.mode2v3

que, de acordo com esta publicação na lista de discussão da Apple , são "configurações de projeto específicas do usuário".

E para o Xcode 4:

xcuserdata

52
Não gosto particularmente dos padrões .pbxuser / .perspective / *. Perspectivev3. Eu prefiro o seguinte .xcodeproj / ! *. Xcodeproj / project.pbxproj Isso ignora tudo dentro de um * .xcodeproj, exceto o project.pbxproj.
23410 Lily Ballard

5
Não ignoro * .pbxuser, * .perspective e * .perspectivev3 porque gosto de manter essas configurações de volta ao clonar meu repositório.
Lajos 27/05

7
Além disso, você pode querer adicionar que você pode fazer um arquivo gitignore "global" como este: git configuração --global core.excludesfile ~ / .gitignore
Jess Bowers

63
Gostaria de alertar todos os que adicionaram o arquivo .gitignore após confirmar o projeto: os arquivos que você ignora ainda estão sendo rastreados. Você vai ter que removê-los do git manualmente usandogit rm --cached <files>
pixelfreak

21
@ SpacyRicochet: A formatação dos comentários aparentemente mudou desde que escrevi o comentário. Daí o itálico. Meu padrão deve se parecer com * .xcodeproj / *! *. Xcodeproj / project.pbxproj. É claro que hoje em dia você precisa ajustá-lo para os espaços de trabalho.
Lily Ballard

64

Em relação à exclusão do diretório 'build' -

Se você colocar seus arquivos de compilação em um diretório diferente da sua fonte, como eu, não precisará se preocupar com a pasta na árvore.

Isso também simplifica a vida do compartilhamento de seu código, impedindo backups inchados e até mesmo quando você tem dependências de outros projetos do Xcode (embora exija que as compilações estejam no mesmo diretório entre si)

Você pode obter uma cópia atualizada da lista principal do Github https://gist.github.com/708713

Meu arquivo .gitignore atual é

# Mac OS X
*.DS_Store

# Xcode
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
*.xcuserstate
project.xcworkspace/
xcuserdata/

# Generated files
*.o
*.pyc


#Python modules
MANIFEST
dist/
build/

# Backup files
*~.nib

7
Eu tenho a pasta de construção fora da pasta do projeto, mas quando outros usuários criam o projeto, por padrão, ele é recriado no projeto. Por isso, descobri que adicioná-lo ao arquivo ignorar é uma solução melhor; caso contrário, ele será lido nos confirma.
Lajos 27/05

58

Para o Xcode 4, também adiciono:

YourProjectName.xcodeproj/xcuserdata/*
YourProjectName.xcodeproj/project.xcworkspace/xcuserdata/*

78
Se você apenas adicionar xcuserdata, isso cuida de ambos.
ma11hew28

7
Por alguma razão, adicionar xcuserdata sem o prefixo não funcionou para mim. Eu pensei que deveria, no entanto. Ímpar.
precisa saber é o seguinte

24

Incluí essas sugestões em um Gist que criei no Github: http://gist.github.com/137348

Sinta-se livre para bifurcá-lo e torná-lo melhor.


5
Também um dos caras do Github coletou alguns arquivos .gitignore. Aqui está o Objective-C específica um- github.com/github/gitignore/blob/master/Objective-C.gitignore
program247365

Além disso, o pessoal do Thoughtbot apresentou esse projeto - github.com/thoughtbot/liftoff, que adicionará arquivos .gitignore padrão sãos, veja a postagem do blog: robots.thoughtbot.com/post/33796217972/…
program247365

14

O pessoal do GitHub possui arquivos .gitignore exaustivos e documentados para projetos do Xcode:

Swift: https://github.com/github/gitignore/blob/master/Swift.gitignore

Objective-C: https://github.com/github/gitignore/blob/master/Objective-C.gitignore


5
Isso já foi postado em uma das respostas acima. Achei que era: incorreto, com suporte questionável (mais de 100 solicitações de recebimento pendentes!) E não documentado. O fato de estar "incorreto" é o pior de todos; eles fizeram um ignorar que só funciona para um conjunto restrito de usos e não explicou o que ou por que! Portanto: minha resposta acima, que corrige seus erros E explica o que está sendo feito e por quê, para que você possa tomar decisões fundamentadas projeto por projeto (em um novo projeto, às vezes esqueço por que alguns dos itens estão lá - os comentários me ajudar a decidir :))
Adam

@ Adam: O GitHub .gitignoreagora foi atualizado para o Xcode 6.3.2 e Swift, agora está correto. Também está documentado.
Eric

Sim, mas o problema de publicar um arquivo destrutivo de dados e mantê-lo assim por meses ou anos - e aparentemente não se preocupando em testá-lo adequadamente - é que você sacrifica permanentemente toda a fé, confiança e respeito da comunidade. Muito tarde.
Adam

14

Você deve verificar gitignore.io para Objective-C e Swift.

Aqui está o .gitignorearquivo que estou usando:

# Xcode
.DS_Store
*/build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
profile
*.moved-aside
DerivedData
.idea/
*.hmap
*.xccheckout
*.xcworkspace
!default.xcworkspace

#CocoaPods
Pods

1
sempre use seu exemplo. boas configurações! Obrigado!
Nikolay Shubenkov 30/10

Eu não uso o gitignore.io há algum tempo - vale a pena conferir se você não tiver. Você pode usá-lo para criar um gitignorearquivo para qualquer IDE / idioma etc que esteja usando. Inclusive adicionará uma seção de cocoapods. Brilliant
Ashley Mills

12

Estou usando o AppCode e o XCode. assim.idea/ deve ser ignorado.

anexar isso ao de Adam .gitignore

####
# AppCode
.idea/

10

Heres um script que eu criei para criar automaticamente seus arquivos .gitignore e .gitattributes usando o Xcode ... Eu o cortei junto com algumas coisas de outras pessoas. Diverta-se!

Xcode-Git-User-Script

Sem garantias ... Eu sou péssima em tudo isso - então use por sua conta e risco


10

Adicionando um arquivo .gitignore para

Mac OS X + Xcode + Swift

Foi assim que adicionei um arquivo .gitignore ao meu projeto Swift:

  1. Selecione seu projeto no Xcode e clique com o botão direito do mouse em → Novo grupo → nomeie-o como " Git "
  2. Selecione a pasta Git e clique com o botão direito do mouse em → Adicionar novo arquivo
  3. Na guia iOS → selecione Outroarquivo vazio

Digite a descrição da imagem aqui

  1. Dê o nome do arquivo aqui " .gitignore "

Digite a descrição da imagem aqui

  1. Confirme o nome e o tipo do arquivo

Digite a descrição da imagem aqui

Aqui está a estrutura de resultados:

Digite a descrição da imagem aqui

  1. Abra o arquivo e passe o código abaixo

# file

#########################################################################
#                                                                       #
#       Title         - .gitignore file                                 #
#       For           - Mac OS X, Xcode 7 and Swift Source projects     #
#       Updated by    - Ramdhan Choudhary                               #
#       Updated on    - 13 - November - 2015                            #
#                                                                       #
#########################################################################

########### Xcode ###########
# Xcode temporary files that should never be committed

## Build generated
build/
DerivedData

# NB: NIB/XIB files still exist even on Storyboard projects, so we want this
*~.nib
*.swp

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata

## Other
*.xccheckout
*.moved-aside
*.xcuserstate
*.xcscmblueprint
*.xcscheme

########### Mac OS X ###########
# Mac OS X temporary files that should never be committed

.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

########## Objective-C/Swift specific ##########
*.hmap
*.ipa

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the Git repository. Instead, use fastlane to re-generate the

fastlane/report.xml
fastlane/screenshots

Bem, graças a Adam . Sua resposta me ajudou muito, mas ainda assim tive que adicionar mais algumas entradas, pois queria um arquivo .gitignore para:

Mac OS X + Xcode + Swift

Referências: isto e isto


1
Resposta muito útil. Adicionei-o como um link na minha resposta Configurando o Github no Xcode .
Suragch

9

O meu é um .bzrignore, mas é a mesma ideia :)

.DS_Store
*.mode1v3
*.pbxuser
*.perspectivev3
*.tm_build_errors

O tm_build_errors é para quando eu uso o TextMate para construir meu projeto. Não é tão abrangente quanto o Hagelin, mas achei que valia a pena postar para a linha tm_build_errors.



4

Eu já adicionei:

xcuserstate
xcsettings

e coloquei meu arquivo .gitignore na raiz do meu projeto.

Depois de cometer e empurrar. Eu então corri:

git rm --cached UserInterfaceState.xcuserstate WorkspaceSettings.xcsettings

enterrado com a pasta abaixo:

<my_project_name>/<my_project_name>.xcodeproj/project.xcworkspace/xcuserdata/<my_user_name>.xcuserdatad/

Então executei git commit e empurre novamente


Você adicionou também? Ou isso é tudo o que você faz?
hakre

1
Sim, adicionei ambos, mas o xcusersate foi o principal arquivo ofensivo. Acrescentar que era a única maneira de enviar meu código remotamente. Caso contrário, eu estava preso em um loop de feedback que exigia confirmação antes do envio. Então você confirma, o Xcode 4.5 solicita que você confirme novamente e você nunca poderá pressionar porque o pré-requisito está sendo confirmado.
user1524957

4

Eu uso o seguinte arquivo .gitignore gerado no gitignore.io:

### Xcode ###
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.xcuserstate


### Objective-C ###
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
Pods/


2

Aqui está o .gitignoreque o GitHub usa por padrão para novos repositórios do Xcode:

https://github.com/github/gitignore/blob/master/Objective-C.gitignore

É provável que esteja razoavelmente correto a qualquer momento.


O arquivo .gitignore do github é uma coleção de todos os arquivos com os quais tivemos problemas no passado. No momento, se você iniciar um projeto do Xcode do zero e permitir que o Xcode pré-configure o repositório git, não resta muito o que ignorar no .gitignore: A única coisa que prefiro ignorar é o xcuserdata / ... .
crosscode

GitHub é o primeiro lugar que eu sempre olhar para gitignores :)
Ben leggiero

1

A maioria das respostas é da era do Xcode 4-5. Eu recomendo um arquivo ignorar em um estilo moderno.

# Xcode Project
**/*.xcodeproj/xcuserdata/
**/*.xcworkspace/xcuserdata/
**/*.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
**/*.xcworkspace/xcshareddata/*.xccheckout
**/*.xcworkspace/xcshareddata/*.xcscmblueprint
.idea/

# Xcode Injection
IOSInjectionProject/
OSXInjectionProject/

# Build
build/
DerivedData

# CocoaPods
Pods/

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/sign&cert

# CSV
*.orig
.svn

# Other
*~
.DS_Store
*.swp
*.save
._*
*.bak

Mantenha-o atualizado em: https://github.com/BB9z/iOS-Project-Template/blob/master/.gitignore


0

Descobrimos que, mesmo se você adicionar o .gitignore e o .gitattribte, o arquivo * .pbxproj pode ser corrompido. Portanto, temos um plano simples.

Toda pessoa que codifica no escritório simplesmente descarta as alterações feitas nesse arquivo. No commit, mencionamos simplesmente os arquivos que são adicionados à fonte. E, em seguida, pressione o servidor. Nosso gerente de integração puxa e vê os detalhes da confirmação e adiciona os arquivos aos recursos.

Uma vez que ele atualize o controle remoto, todos terão sempre uma cópia de trabalho. Caso algo esteja faltando, informamos a ele para adicioná-lo e puxá-lo novamente.

Isso funcionou para nós sem problemas.


0

Eu recomendo usar joe para gerar um .gitignorearquivo.

Para um projeto iOS, execute o seguinte comando:

$ joe g osx,xcode > .gitignore

Isso irá gerar .gitignore:

.DS_Store
.AppleDouble
.LSOverride

Icon
._*

.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns

.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

build/
DerivedData

*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata

*.xccheckout
*.moved-aside
*.xcuserstate

-3

Uma estrutura de um arquivo .gitignore padrão para o projeto Xcode>

.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
!default.xcworkspace
xcuserdata
profile
*.moved-aside
DerivedData
.idea/

Como isso é diferente de qualquer uma das respostas anteriores? Não basta colar seu gitignorearquivo aqui, isso não adiciona nada a este assunto.
Ashley Mills

@AshleyMills Por favor, leia o answar primeiro e depois adicionar um comentário .... O answar é para uma estrutura invulgar / queridos necessário .... que são essenciais para ter ...
Rahul Singha Roy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.