2015年9月28日月曜日

SubversionとGitの連携

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

現在はMicrosoft Azureについて連載の途中なのですが、その副産物でちょっとした事に気付いたので、今回は番外編です。

内容は、「SubversionとGitの連携」です。

今の潮流はGit

さて、このブログをご愛読の皆さんはGitをご存じでしょうか?
使ったことの無い人でも名前くらいは聞いたことのある、世界的に有名なバージョン管理システムです。

細かい内容は専門サイトにお任せするとして、やっぱり最近はGitが流行ですよね。

流行の原動力となっているのは、こちら、GitHubが最大の要因でしょう。


まあ、簡単に言ってしまえばGitサーバレンタルサービスとでも申しましょうか。

オープンソースを開発してGitHubに掲載!!
今の時代はこれが世界で一番クールなIT技術者というイメージです。

プログラマーなら一度はオープンソースを作ってGitHubデビューしてみたいですね。

弊社はSubversion

しかし、バージョン管理システムはGitだけではありません。
他にも色々なバージョン管理システムがあり、その一つにSubversion(以下、SVN)があります。

弊社、ジェニシスでは主にこのSVNが使われています。

何故、GitではなくSVNを使っているかって?
そりゃ、前からSVNだからですよ。

今までSVNでソース管理してきちゃってるんだから、今更Gitに引っ越しなんて大変でしょ?

分かり易い事情としてご理解頂けると思います。(泣)

このため、私もGitを使う機会が殆ど無かったのですが、最近の連載であるAzureはGitを使う都合上で触っていたら、なーんだ。
既にSVN運用していても途中からGitデビューする方法があることに気付きました。

これが今回のテーマになります。

SVNの問題点

さて、何故私がSVNからGitに乗り換えることを画策するのか?
それはSVNには困った問題点があるからです。
それは「ゴミコミット」です。

まず前置きとして、SVNは特にチーム内で運用ルールを設けない限り、開発メンバーは以下のようにガンガンソースをコミットしてきます。



結果、このようにコミット履歴がボンボコボンボコ。。。
中にはミスコミットも混ざり込んでいることもあります。
リポジトリの肥大化が著しいですね。
これがゴミコメット問題です。




「だったらコミットルールを作れば良いじゃん?」

ってのはありますね。

  • レビューが完了するまでコミットしない。
  • コミットする時は複数人でコミット。

こういうルールにしておけばゴミコメット問題は発生しません。
しかし、これは面倒&非効率なのですよ。

実装者の立場としては、

  • ちょっと作って、動作確認。コミット。
  • ちょっと作って、動作確認。コミット。
  • ちょっと作って、動作確認。コミット。

これを繰り返したいのです。
そして何かミスってソースが壊れちゃった場合は、前回コミット段階までロールバック。
綺麗スッキリやり直し。

こうやって実装を進めるのが効率が良いのです。

しかし、「レビューが完了するまでコミット禁止」なんてやられるとこのテクニックが使えません。
あっちこっち未コミット状態になってしまって、何が何やら……。

逆にミスして変なバグが起きたりしないか、心配でなりません。



小まめにコミットした方が安全、合理的。

これは絶対そうなのですよ。
しかしこれだと上記のゴミコメット問題が発生する……。

Gitの利点

しかし、Gitだとこのゴミコメット問題が解消されます。


Gitでは本体リポジトリのクローンを自分のリポジトリに作って、クローンに対してコミットします。
そしてレビュー完了など万全な状態になったら、「プッシュ」を行うことで本体と統合!!

自分のパソコンに作ったクローンに何をコミットしようが本体リポジトリには影響がありません。

これで作業効率は高いまま、リポジトリへのミスコミット、ゴミコメットを防ぐことが可能になります。

これはぜひGit使いたいなぁ……。
でもウチの会社って本体がSVNだし……。

SubversionとGitの連携

ずっとこう思っていたのですが、Gitを触り始めて気がつきました。

本体SVNをGitクローン化。
これが出来るじゃありませんか。



本体がGitでなければGitは使えないと思っていたが、そんなこと無かった。

例えばTortoizeGitのクローン操作画面でも、以下のようにSVNからのクローンというメニューが出てきます。


Gitクローンを自分のローカルPCに作ったら、後は普通のGitと同じです。

本体がSVNである以上はGitの全機能が解放されているとは言えませんが、
少なくとも自分のローカルPC内ではGit機能がバッチリ使えます。

ゴミコミット問題もこれで解決です。

すぐに始めてOK

このGitクローンの好都合な点は、自分のローカルPCの中だけで完結する話だということです。

自分のローカルPCに何が起きても周囲に派生しませんし、
本体SVNから見れば普通にチェックアウトしてコミットしているようにしか見えませんからね。

今までSVNを使っているチームメンバー全員が一気にこのやり方に変更するのはチーム運用上手間がかかる話ですが、
このSubversion-Git連携の場合、自分一人だけコッソリGit活用していても周囲には何の影響もありません。

さあ、Gitを使いたがっているそこのあなた、さっさと移行してしまいましょう。

ただし、今までGitを使ったことの無い人は、事前にちゃんと使い方を覚えてからをオススメします。
微妙に高機能で複雑ですから。

例えば、当記事の「何度も作業コミットして、最後に一回だけ本番プッシュしたい」という目的の時に、
普通に「SVNへコミット」を実行すると、ご丁寧にも作業コミット履歴まで遡ってSVNに入ってしまってゴミコミット状態と何も変わらないという憤怒のオチになっちゃったりします。

事前に「一つのコミットに集約」をやっておくとか、Gitの機能を知っておかないと目的を果たせませんので、事前勉強は怠らないようにして下さい。



終わりに

既にGitを使っている人にとっては当たり前の知識かもしれませんが、
新しい技術領域にチャレンジしてみると、副産物でこういうチョイテクに気付くこともあるものです。

技術者たる者、アンテナは幅広く伸ばしていきたいものですね。

0 件のコメント:

コメントを投稿