開発日誌

開発進捗など

git のサブモジュールを使う

git のサブモジュールを使う

アプリ制作の過程で得た知見を、再利用可能なモジュールとは言わないまでも せめて小さなサンプル形式でいいから GitHub に残していこうと思いました。

そこで、複数のプロジェクトをアップロードするにあたり気になるのは 各プロジェクトに入っている cocos2d ディレクトリの重複。

ここの重複を、git のサブモジュールを使って共通の別リポジトリとして括り出す ことで無駄を省くことができます。

サブモジュール用リポジトリの作成

まず、サブモジュールとなるリポジトリを作成していきます。

GitHubリポジトリを作成する

GitHubリポジトリを作成します。

新規プロジェクトの作成

サブモジュールにする cocos2d ディレクトリを得るため、まずは新規のプロジェクトを作成します。

cocos new -l cpp [プロジェクト名]

cocos2d ディレクトリを git リポジトリにしてコミットする

cd [プロジェクトディレクトリ内の cocos2d ディレクトリ]

git init
git add .
git commit -m [コミットメッセージ]

GitHub へプッシュする

git remote add origin git [リポジトリのURL]
git push -u origin master

これでサブモジュールのリポジトリは設定完了です。

サブモジュールを使う

新規プロジェクトを作成し、 git リポジトリにするまでは同じです。

サブモジュールを設定する

まず元々入っている cocos2d ディレクトリを削除します。

cd [プロジェクトのディレクトリ]
rm -rf ./cocos2d
git submodule add [サブモジュールのリポジトリURL] cocos2d

これで cocos2d がサブモジュールのリポジトリから clone されます。

サブモジュールを使ったリポジトリをチェックアウトする場合

git clone [プロジェクトのリポジトリURL]

clone してくると、サブモジュールはディレクトリのみで中身が空になっていますので 初期化と更新を行います。

git submodule update -i

応用

サブモジュールを特定のタグに紐付ける

submodule の master 以外のブランチやタグを使う場合は、サブモジュールのディレクトリで git 操作(checkout等) を行い、外に出て(元の利用側プロジェクトで) git add すると、変更が記録されます。

cocos2d-x のバージョンアップをする

cocos2d-x の新しいバージョンがリリースされたら、新規プロジェクトを作成して中のcocos2dをサブモジュールディレクトリに上書きすれば利用側のプロジェクトでもサクっとバージョンアップ対応できます(cocos2d ディレクトリ以外も変更がある可能性があるのでそこは注意してください)。