やりたいこと
ionic cordova build ios
で platforms
以下に出力されるXcodeのプロジェクトをgit管理したい
目的
Xcodeのプロジェクト自身に設定された情報(Capabilitiesなど)をバージョン管理したいため
環境
$ ionic info
cli packages: (/usr/local/lib/node_modules)
@ionic/cli-utils : 1.19.2
ionic (Ionic CLI) : 3.20.0
global packages:
cordova (Cordova CLI) : 8.0.0
local packages:
@ionic/app-scripts : 3.1.11
Cordova Platforms : CordovaLib cordova ios 4.5.5 ios_test ios_test.xcodeproj ios_test.xcworkspace platform_www www
Ionic Framework : ionic-angular 3.9.2
System:
ios-deploy : 1.9.0
ios-sim : 5.0.12
Node : v6.4.0
npm : 3.10.3
OS : macOS Sierra
Xcode : Xcode 9.2 Build version 9C40b
platforms 以下のXcodeプロジェクトは git submodule で独立したリポジトリとして管理する
ionic のルート直下にあるデフォルトの .gitignore
では platforms
以下は無視されている
platforms
以下を対象にするため、# platforms/
としたいところだが、そのままだと platforms
以下の node_modules
や plugins
まで対象外になってしまう
ionic のルート直下にあるデフォルトの .gitignore
を直接編集することも考えたが、以下の理由で止めた
-
platforms
以下にもnode_modules
ディレクトリがあるが、package.json
がないため無視されてしまうとクローン後に再現できない - かといってルート直下の
.gitignore
に書かれている、「ルート以下の特定の名前を持つ全ディレクトリを無視する設定」を、platforms
以下だけ追跡するようにするのは難しそう1 -
ionic cordova platform add ios
のときにしか生成されない、iOSでしか使われないモジュールが含まれているよう
思いもよらないファイルを無視してしまってエラーが出るのも面倒なので、node_modules
以下も含めて git 管理してしまうことにする
サブモジュール作成手順
- ionic プロジェクトのルートで
git init
- platforms/ios で
git init
し、サブモジュール化
$ ionic start ionic_test blank
$ cd ionic_test/
$ ionic cordova platform add ios
$ ionic cordova run ios // エミュレータで動作確認
// ionic_test/platforms/ios で git init
$ cd platforms/ios
$ git init
// リモートリポジトリを設定してプッシュ(この例では、リモートリポジトリは https://bitbucket.org/ionic_test_ios.git)
$ cd ../
$ rm -rf ios
// ionic_test/platforms
$ git submodule add -f https://bitbucket.org/ionic_test_ios.git ios
// サブモジュールを設定すると、カレントディレクトリにクローンされる
あとはサブモジュールにコミットすると、もとの git の方にもそのコミットIDが自動的に反映されるので、もとの git の方でそのコミットIDをコミットする
実際に clone してビルドしてみる
$ git clone https://bitbucket.org/ionic_test.git
Cloning into 'ionic_test'...
remote: Counting objects: 101, done.
remote: Compressing objects: 100% (93/93), done.
remote: Total 101 (delta 7), reused 0 (delta 0)
Receiving objects: 100% (101/101), 1.32 MiB | 295.00 KiB/s, done.
Resolving deltas: 100% (7/7), done.
Checking connectivity... done.
$ cd ionic_test/
$ git submodule
-0b12e433d5fa9475180d9a6ef29f2db0ffa00648 platforms/ios
$ git submodule init
Submodule 'platforms/ios' (https://bitbucket.org/ionic_test_ios.git) registered for path 'platforms/ios'
$ git submodule update
Cloning into 'platforms/ios'...
remote: Counting objects: 849, done.
remote: Compressing objects: 100% (635/635), done.
remote: Total 849 (delta 147), reused 820 (delta 138)
Receiving objects: 100% (849/849), 2.97 MiB | 549.00 KiB/s, done.
Resolving deltas: 100% (147/147), done.
Checking connectivity... done.
Submodule path 'platforms/ios': checked out '0b12e433d5fa9475180d9a6ef29f2db0ffa00648'
$ ionic cordova build ios
...
** BUILD SUCCEEDED **
[ERROR] An error occurred while running cordova build ios (exit code 1).
// エラーの理由が分からないが、もう一度ビルドすれば正常にビルドされる
$ ionic cordova build ios
まとめ
.gitignore
が上手く書けなかったのでサブモジュールを使いましたが、リポジトリが分かれてしまうのでできればひとつのリポジトリで管理したかったです
.gitignore
での上手な書き方があれば教えてください!
参考
-
「ただし、一度記述した「ディレクトリの除外」を、跡から!で追跡しなおす設定は認められません。」(http://www-creators.com/archives/1662#gitignore-5) ↩