LoginSignup
4
5

More than 5 years have passed since last update.

TowerでGitのsubmoduleを扱う

Last updated at Posted at 2016-02-09

submoduleは、別リポジトリの内容をサブディレクトリとして扱うようにできるGitの機能です。ここではGitクライアント「Tower」でのsubmoduleの扱い方について記載します。

使用したバージョン

  • Tower 2.3.3
  • Mac OS X El Capitan バージョン 10.11.2

submoduleを追加する

submoduleを追加するには、メニューの[Repository]→[Add New Submodule...]を選択します。

image 2016-02-09 15.31.11.png

メニューから選択後、以下のダイアログが表示されます。[Path]、[Repository URL]に、それぞれsubmoduleを配置するサブディレクトリー、リポジトリのURLを入れます。

image 2016-02-09 15.32.19.png

submodule内のファイルを変更する

左側ペインの[Submodules]をダブルクリックすると、submodule内を通常のリポジトリとして扱うことができます。ヘッダーにどこのリポジトリのsubmoduleなのか表示されるため、分かりやすいです。ここで通常通りコミットとプッシュを行うことでリポジトリは更新されます。

image 2016-02-09 17.01.23.png

submodule側でコミットを行うと、親側のリポジトリーで、変更が検知されます。これをコミット&プッシュすることで、親側のリポジトリーのsubmoduleの取り込み先ハッシュ値が更新されます。

image 2016-02-09 17.01.49.png

リモートのリポジトリ―にsubmoduleがある場合

cloneするとき

clone時に[Initialize Submodule]にチェックを入れておくと、自動でsubmoduleの中身の取り込みがされます。チェックを入れておかないと、submoduleのディレクトリの中身は空になっています。チェックを入れていない場合のsubmoduleの中身を取り込み方は後述で説明します。
image 2016-02-09 16.39.52.png

pullする

リモート上のリポジトリのsubmoduleハッシュ値が更新されている状態で、pullを行うと以下のダイアログが表示されます。

[Update]ボタンを押すと、submoduleの更新が取り込まれます。自分がsubmodule内のファイルを更新することがなければ、[Always auto-update submodule]にチェックを入れておいて大丈夫だと思います。(作業する場合だとコンフリクトする可能性があります)
image 2016-02-09 16.20.21.png

submoduleの内容を取り込む

clone時に[Initialize Submodule]にチェックを入れておかなかったり、pull時に[Update]を選択していない状態だと、submoduleの中身が空のままだったり、古いままになります。左側パネルの[Submodules]を選択した時に黄色い帯で「Submodule is uninitialized. Use "Update" to Initialize now.」とのメッセージと[Update]ボタンが表示されるので、[Update]ボタンをクリックすることで、submoduleのディレクトリの中身が取り込まれます。

image 2016-02-09 16.04.08.png

具体的な事例

Webサイト「HTML5製のデザインツール Particle Develop - ICS」の開発で、submoduleを使用しました。パーティクルエディター内ではパーティクルシステムをsubmoduleとして扱うことで、パーティクルシステムのランタイムを単体で提供できるようになりました。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5