Git忽略Xcode项目的文件


Answers:


693

我以前使用的是投票最多的答案,但是需要进行一些清理,因此这里可以重做Xcode 4,并进行了一些改进。

我已经研究了此列表中的每个文件,但是其中一些文件在Apple的官方Xcode文档中不存在,因此我不得不进入Apple邮件列表。

苹果继续添加未记录的文件,可能会破坏我们的实时项目。恕我直言,这是不可接受的,现在我每次都开始针对它记录错误。我知道他们不在乎,但也许会让其中之一更公平地对待开发人员。


如果您需要自定义,可以在这里进行总结: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
您不应该忽略*.lockPodfile.lock(不要介意冗余)。您需要在所有工作空间中安装完全相同的版本,而不需要“最新版本”。
tvon

8
我已经删除了Podfile部分。我最初并没有添加,所以说其他人添加了它,然后我粗心地将其复制/粘贴到了要点中。对于任何/所有混淆和误解,我深表歉意。我真的不喜欢StackOverflow允许任何人编辑您的答案的方式:(。–
Adam

5
现在,每行都有一个解释行。这应该使它更清晰,并使为自己的项目自定义变得容易。
亚当

3
@Adam如我所见,此文件包含VCS元数据,因此不应将其检入VCS。不,developer.apple.com关于xccheckout。但是在官方github页面上,此文件已经包含在gitignore文件中。https://github.com/github/gitignore/blob/master/Objective-C.gitignore
skywinder

3
没有官方的描述,我们将不会忽略任何事情。几乎每当人们这样做时,它迟早都会破坏某人的项目。太危险了-不要去那里。因此,除非我有可验证的来源确认可以安全忽略,否则我拒绝向此文件添加任何内容!
亚当

276

根据此Mercurial指南,我的.gitignore包括:

.DS_Store
*.swp
*~.nib

build/

*.pbxuser
*.perspective
*.perspectivev3

我还选择包括:

*.mode1v3
*.mode2v3

根据此Apple邮件列表帖子,这些是“用户特定的项目设置”。

对于Xcode 4:

xcuserdata

52
我不太喜欢.pbxuser / .perspective / *。perspectivev3模式。我更喜欢以下 .xcodeproj /!*。xcodeproj / project.pbxproj,它会忽略* .xcodeproj内的所有内容,但project.pbxproj除外。
莉莉·巴拉德

5
我不会忽略* .pbxuser,*。perspective和* .perspectivev3,因为在克隆存储库时,我希望保留这些设置。
约什

7
另外,您可能还想补充一下,您可以像这样制作一个“全局” gitignore文件:git config --global core.excludesfile〜/ .gitignore
Jess Bowers

63
我想提醒所有提交项目添加.gitignore文件的人:仍然忽略那些您忽略的文件。您必须使用git rm --cached <files>
pixelfreak 2011年

21
@SpacyRicochet:自从我写评论以来,评论格式显然已经改变。因此,斜体。我的模式应该看起来像* .xcodeproj / *!*。xcodeproj / project.pbxproj。当然,这些天您确实需要针对工作空间进行调整。
莉莉·巴拉德

64

关于“构建”目录排除-

如果像我一样将构建文件放置在与源文件不同的目录中,则不必担心树中的文件夹。

这也使共享代码,防止大量备份甚至在您依赖于其他Xcode项目的情况下(使构建彼此之间都位于同一目录中)也变得更加简单。

您可以从Github gist https://gist.github.com/708713获取最新的副本

我当前的.gitignore文件是

# 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
我确实在项目文件夹之外有build文件夹,但是当其他用户构建项目时,默认情况下会在项目中重新创建它-因此我发现将其添加到ignore文件中是一个更好的解决方案,否则会将其读入他们的提交。
拉霍斯


24

我在Github上创建的Gist中包含了这些建议:http : //gist.github.com/137348

随意分叉,并使其变得更好。


5
还有一个Github家伙收集了一些.gitignore文件。这是特定于Objective-C的代码-github.com/github/gitignore/blob/master/Objective-C.gitignore
program247365

另外,Thoughtbot人们想出了这个项目- github.com/thoughtbot/liftoff这将增加一个理智的默认的.gitignore文件,在它上面看到他们的博客文章:robots.thoughtbot.com/post/33796217972/...
program247365

14

GitHub的人员为Xcode项目提供了详尽且记录完整的.gitignore文件:

斯威夫特: https : //github.com/github/gitignore/blob/master/Swift.gitignore

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


5
这已经发布到上面的答案之一。我发现它是:不正确,可疑地受支持(超过100个未完成的拉取请求!),并且没有记录。它“不正确”的事实是最糟糕的。他们忽略了仅适用于狭窄用途的忽略项,而没有解释什么或原因!因此:我在上面的答案纠正了他们的错误,并解释了正在做的事情以及原因,因此您可以在逐个项目的基础上做出明智的决策(在一个新项目中,我有时会忘记为什么其中有些项目-评论有助于我做出决定:))
亚当(Adam

@Adam:GitHub的.gitignoreXcode 6.3.2和Swift已经更新,所以现在是正确的。也有记录。
埃里克

是的,但是发布破坏性数据的文件并将其保存数月或数年(而且显然不愿意对其进行正确测试)的问题是,您永久牺牲了社区的所有信任,信任和尊重。太晚了。
2015年

14

您应该为Objective-C和Swift 签出gitignore.io

这是.gitignore我正在使用的文件:

# 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
始终使用您的示例。不错的设置!谢谢!
Nikolay Shubenkov

我有一段时间没有使用gitignore.io了-值得一查。您可以使用它为所使用gitignore的任何IDE /语言等创建文件。甚至还会添加一个cocoapods部分。辉煌
Ashley Mills

12

我同时使用AppCode和XCode。所以.idea/应该忽略。

将此附加到亚当的 .gitignore

####
# AppCode
.idea/

10

这是我使用Xcode自动创建.gitignore和.gitattributes文件的脚本。玩得开心!

Xcode-Git-用户脚本

没有保证...我最多只能吸用-因此使用后果自负


10

添加.gitignore文件以

Mac OS X + Xcode + Swift

这是我在Swift项目中添加.gitignore文件的方式:

  1. 在Xcode中选择您的项目,然后右键单击→ 新建组 →将其命名为“ Git
  2. 选择Git文件夹并右键单击→ 添加新文件
  3. iOS标签中 →选择其他空文件

在此处输入图片说明

  1. 在这里给文件名“ .gitignore

在此处输入图片说明

  1. 确认文件名并输入

在此处输入图片说明

这是结果结构:

在此处输入图片说明

  1. 打开文件并通过以下代码

# 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

好吧,感谢亚当。他的回答对我有很大帮助,但是我仍然需要添加一些条目,因为我想要一个.gitignore文件用于:

Mac OS X + Xcode + Swift

参考文献:


1
非常有用的答案。我将其作为链接添加到我在Xcode答案中的设置Github中
苏拉奇

9

我的是一个.bzrignore,但它是相同的主意:)

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

tm_build_errors适用于使用TextMate构建项目时的情况。它不像Hagelin那样全面,但是我认为值得在tm_build_errors行中发布。



4

我已经添加:

xcuserstate
xcsettings

并将.gitignore文件放在项目的根目录下。

提交并推送之后。然后我跑了:

git rm --cached UserInterfaceState.xcuserstate WorkspaceSettings.xcsettings

埋在下面的文件夹中:

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

然后我运行git commit并再次推送


您也添加了吗?还是这只是您所做的一切?
hakre 2012年

1
是的,我同时添加了两者,但xcusersate是主要的问题文件。添加那是我可以远程推送代码的唯一方法。否则,我陷入了一个反馈循环,该循环需要在推送之前提交。因此,您提交了,然后Xcode 4.5会要求您再次提交,而由于pre req正在提交,您将永远无法推送。
user1524957

4

我使用gitignore.io中生成的以下.gitignore文件:

### 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

.gitignore是GitHub默认用于新Xcode存储库的:

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

在任何给定时间,它可能都是合理正确的。


github .gitignore文件是我们过去遇到过的所有文件的集合。现在,如果您从头开始一个Xcode项目,让Xcode预配置git存储库,那么.gitignore中没有太多需要忽略的地方:我唯一要忽略的是xcuserdata / ... ...这有助于避免提交混乱。
17:03交叉编码

GitHub是我第一次寻找gitignores的地方:)
Ben Leggiero

1

大多数答案来自Xcode 4-5时代。我建议使用现代风格的忽略文件。

# 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

使其更新自:https : //github.com/BB9z/iOS-Project-Template/blob/master/.gitignore


0

我们确实发现,即使添加.gitignore和.gitattribte,*。pbxproj文件也可能损坏。因此,我们有一个简单的计划。

每个在办公室编码的人都只是丢弃对该文件所做的更改。在提交中,我们简单地提到添加到源代码中的文件。然后推送到服务器。然后,我们的集成管理器将拉取并查看提交详细信息,并将文件添加到资源中。

一旦他更新了遥控器,每个人都将始终拥有一个工作副本。万一缺少东西,我们通知他添加它,然后再次拉。

这已经为我们解决了任何问题。


0

我建议使用joe生成.gitignore文件。

对于iOS项目,请运行以下命令:

$ joe g osx,xcode > .gitignore

它将生成此.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

Xcode项目的标准.gitignore文件的结构>

.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/

这与之前的答案有何不同?不要只是将gitignore文件粘贴到此处,这不会为该主题添加任何内容。
Ashley Mills

@AshleyMills请先阅读answar,然后添加评论.... answar用于标准结构/必需的结构....这是必不可少的...
Rahul Singha Roy
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.