Hatena::ブログ(Diary)

ヤルキデナイズドだった

Yarukidenized

2011-03-24

[]Xcode プロジェクトをうまく .gitignore する 00:50 Xcode プロジェクトをうまく .gitignore するを含むブックマーク

2015年11月9日追記:以下の内容は Xcode 4 までに対応しています。最近の Xcode に対応するには github.com/github/gitignore の Objective-C.gitignore を使うことをお勧めします。(追記終わり)

Xcode で作ったプロジェクトを Git で管理するにあたってめんどくせえーのは、 .xcodeproj の中にプロジェクトのデータとユーザデータが一緒に入ってる点です。普通に空のプロジェクトを作るとこうなります:

Xcode 3:
- $PROJ.xcodeproj/
  - project.pbxproj
  - $USER.mode1v3
  - $USER.pbxuser

Xcode 4:
- $PROJ.xcodeproj/
  - project.pbxproj
  - project.xcworkspace/
  - xcuserdata/

この中でプロジェクトの設定を含むのは project.pbxproj だけです。他の不要なファイルを無視するために、今までは:

# .gitignore
*.mode1v3
*.pbxuser
project.xcworkspace
xcuserdata

こう記述していたんですが、場合によっては *.perspective なんちゃらいうファイルも作られるようで、いちいち ignore するのがめんどくさい!

というわけで必要なもの以外全部無視することにしました:

# .gitignore
*.xcodeproj/*
!*.xcodeproj/project.pbxproj

サブディレクトリ内に .xcodeproj がある場合は:

# .gitignore
**/*.xcodeproj/*
!**/*.xcodeproj/project.pbxproj

こうします。両方書いておけば万全です。

追記

default.pbxuser などは除外しないほうがよさそうです(参考:コメント欄&覚書き:Xcode と Subversion « 鵺的:想空間)。

!*.xcodeproj/default.*
!**/*.xcodeproj/default.*

これも加えると完璧。

追記2

まだありました。 Workspace 関係のファイルを除外するには:

*.xcworkspace/*
!*.xcworkspace/contents.xcworkspacedata

marutanmmarutanm 2011/04/29 00:07 ご参考までに
https://github.com/github/gitignore/blob/master/Objective-C.gitignore

uasiuasi 2011/05/03 23:53 ありがとうございます。 default.pbxuser あたりは除外しないほうがよさそうですね。

mazgimazgi 2011/12/15 14:07 参考にさせていただいてます。
Workspace使ってみるにあたり↓みたいな感じで試してます。
<pre>
#--------
# OSX
.DS_Store
#--------
# Xcode Workspace
*.xcworkspace/*
!*.xcworkspace/contents.xcworkspacedata
#--------
# Xcode Project
**/*.xcodeproj/*
!**/*.xcodeproj/project.pbxproj
!**/*.xcodeproj/default.*
</pre>

uasiuasi 2011/12/15 15:58 報告ありがとうございます、本文に追記しておきました。

xx 2015/11/09 00:01 本記事とても参考にしていました。
ただ、これだと *.xcodeproj/xcshareddata/ が無視されてしまいますね。
この記事が書かれた当時はなかったんですかねー。
結局gibo xcodeをそのまま使う(「>必要なもの以外全部無視」しない)のが一番かも知れません。

(古い記事ですが「xcode gitignore」で5つめに来るページなのでコメントしておきます。)

uasiuasi 2015/11/09 18:12 コメントありがとうございます。さすがに内容が古くなってきたので github.com/github/gitignore を参照するように追記しておきました。