Git Subtree の話


こんにちは、Gaji-Labo コーヒー部長の山岸です。社内ではサードウェーブならぬGajiウェーブをぎゅんぎゅん巻き起こしています。

そしてこの記事は Gaji-Labo Advent Calendar 2015 5日目の記事です。

今年は弊社の「Tech Share」を元にメンバー持ち回りで書いています。Tech Share については1日目のエントリーをご覧になってみてください。

メンバーの中で唯一エンジニアではない山岸は、いつもメンバーの技術に対するセンスやアンテナに感心するばかり。でも、ただひとつ「この技術、他のみんなよりも使いこなしてるぞ!」というものがささやかにありますので、今回はそれを紹介したいと思います。

Git Subtree がとても便利

Git Subtree は、2012年5月以降にリリースされた git の機能です。git 1.7.11 以降において利用可能になっている機能です。

ざっくり言うと、ふたつのプロジェクトがあるときに一方のプロジェクトをもうひとつのプロジェクトのサブディレクトリに位置付けたり、その逆を行ったりをしてくれる感じです。git-merge のしくみで動いてるとのこと。

類似の機能に Git Submodule というのがありますが、そちらの説明は割愛します。

Git Subtree の使い方

私は技術者ではないので、詳しい説明やコードサンプルは元のリポジトリをあたるか、他のサイトを参考にした方がいいと思います。以下にいくつか参考サイトを挙げておきます。(決して手を抜いているわけではありません! 元ソース当たるの大事っていつもエンジニアさんが言ってる気がしますし!)

山岸は何のために使っているか

そもそもなぜこの機能に目を付けたのかというと、GitHub および GitHub Pages を手軽に利用するためです。予算の付かない個人プロジェクトや細々したサイトを作る時には、無料のサービスに頼ることになります。中でも GitHub Pages は最強のサービスのうちのひとつと言っていいと思います。

そういったプロジェクトで山岸が GitHub を使ってやりたいことは主に2つです。

  1. ウェブサイトを簡単に公開する場所と仕組みがほしい
  2. HTMLに限らず、関連する全ファイルをバージョン管理したい

1つめに関しては、GitHub Pages を使えば解決です。サイトを公開する際に、FTPでアップロードするという工程を挟まないといけないのは面倒ですが、自分はエンジニアではないのでデプロイプログラムは組めません。しかし GitHub Pages なら push するだけです。

2つめに関しても、ファイルを全公開してよいならば、ひとつのリポジトリで管理すればいいでしょう。ただし、「HTML以外のファイルは公開せずに運用したい」「HTMLファイルは独立したリポジトリで管理したい」という時に、少し話がややこしくなります。

そんな時にバッチリ出会ったのが Git Subtree なのです。

Git Subtree の運用方法

山岸の運用はいたってシンプルです。ひとつ private の GitHub リポジトリを持っておいて、そこで全ファイル管理。その中から、公開用のHTML一式を subtree として別リポジトリで別管理するというやり方です。

リポジトリとツリーの対応例
左が全ファイル管理のため、右が公開のためのリポジトリです

具体的には、Middleman + Slim のビルド用ディレクトリをまるっと subtree にして運用している、みたいなイメージだと思ってもらえるとわかりやすいと思います。そして実際やっていることはそのとおりのことです。そのため、自分の使い方だとほとんど subtree からの pull はしない運用になっています。

使い方は人それぞれ

山岸が Git Subtree を使うようになったのは2014年の夏頃のことなのですが、当時はまだあまり日本語リソースがなくて、調べるのに苦労しました。今は日本語リソースもかなり増えているようです。

私の使い方はもしかしたら筋がいいものではないのかもしれませんが、他のエンジニアさんたちが Git Subtree のポテンシャルを存分に活かしている実例・運用例もまとめられていますので、参考になるサイトをいくつか挙げておきます。

エンジニアじゃない人にもおすすめ

上記で述べたように、予算が少なくても利用できるしくみなのが利点。また、最近では普通に git を使いこなすデザイナーさんも増えています。git が使える人であれば使える機能ですので、活用しない手はない!

主にエンジニアさんが利用している技術だとしても、それを難しいと思い込まずに手を出してみると、うれしいことがいっぱい! というのをもっと知ってほしいなぁと思います。Gaji-Labo では、Tech Share を通じて触れられる技術がたくさんあるので、とても刺激になっているんです!

逆に、私がやっていることで他のメンバーに刺激を与えられていることもたくさんあります。Tech Share を通じてお互いに学び合う感じがとても気に入っています。

そんなこんなで、自分担当の初回は技術っぽいことを書いてみましたが、次回からは私がメンバーに提供できたであろう刺激の中から、特に気になる話題を選んで書いていきたいと思います。

関連リンク


投稿者 Yamagishi Hitomi

主にサービスデザイン案件や新規事業・スタートアップ案件を担当し、サービスデザイナー/プロセスファシリテーターとしてビジネスとデザインが密接な領域で活動。柔軟なプロセス設計を持ち味にして、チームの成果と成長に貢献しています。社内ではメンバーが健康に働ける環境の整備やひとりひとりの成長のためのしくみづくりなどを担当。おいしいコーヒーを買ってくる担当もやってます☕