サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

入門 git(Travis Swicegood著/オーム社)

あいさつ

気づけばひと月ぶりの投稿です(Qiita にはちょくちょく投稿していました)。やはりアルバイト始めて体力が限られてきました。

はじめに

バージョン管理システム Git について書かれた入門書です。

ハンズオンから始まって、応用的な使い方まで網羅的に詰め込んであります。前半の丁寧さに比べて後半の詰め込み具合が気になりますが、実際には前半の部分がちゃんとできていれば日常的な Git 操作に不自由しないほどになりますし、習熟が進んできたら後半の内容も理解できるようになります。そういう意味では後半はもっと詰め込んでも良かったのかもしれません。

私の場合、上記の本で基本的なことを学んで運用をはじめ、最近また改めて読み直しましたが、初めて読んだ時に理解できなかった部分がスムーズに頭に入ってきました。おそらく、またしばらく時間をおいてから三たび読んだ時に、また新たな発見と成長があるものと思っています。ツールの習熟は手になじみ、その文化背景が心にしみ込むまで繰り返し繰り返し行うしかありません。この本は一気に読むのではなく、ツールを使いながらレベルアップしたくなったら次を読む、という読み方が良いかもしれません。

ずっと master で開発してきた

バージョン管理システム Git について何年か使ってきましたが、ほとんど個人開発にのみ使っていました。そのため、ずっと master ブランチだけで直線的な開発を行い、またそれでとくに不都合もありませんでした。

先日はじめてチーム開発を行ったので Git を導入し、またブランチ運用も始めました。いままでブランチ機能については正直なところ眼中になかったのですが、本格的なチーム運用になるのでそういうわけにも行かず、改めてしっかりと勉強してプロジェクトに臨みました。すると「なぜこのような便利な機能を今まで使わなかったのだろうか」と、目からウロコがとれたように感じました。「Git で面白い機能には、さらに面白い機能がある」と、この本「入門 git」に書かれていましたが、まさにそんな感じです。

Git を学ぶべきかどうか、背中を押してほしい人に

これは間違いなく Yes です。もしあなたがまだ Git を使っておらず、利用するかどうかについて検討中なら全くためらうことはありません。とくに検討中でもないというかたは、この記事にはたどり着かないと思いますが、ちょっと興味があるのでググってみたというかた(も来ないだろうな)は、是非検討に入れてみてください。必要な学習コストは延べ10時間程度です。Git をよく知る人は、10時間では足りないと言うでしょう。たしかに多くの機能があるので、熟達するには確かに多くの時間が必要です。ここで10時間とは、学んだことが「実を結んだ」と感じられるまでの時間と考えます。なぜなら、そこまでが「コスト」であって、あとは「益」に転化されるため、それはもうコストとは呼べないものになると考えるからです。Git は、考えるよりも早く益をもたらしてくれます。

他のバージョン管理との違い

他のバージョン管理システムを使用しているかたは、現在のツールで十分だと考えているかもしれません。

しかし、もしわたしが SubVersion を使用するチームに派遣されたとしても、Git を併用するでしょう。というのも後述する多くのメリットがあるためです。

Git のメリット

  • 高速
  • 秘密
  • 共存

高速

まず Git はリポジトリ(ファイル群のバージョンを追跡・管理・格納するデータベース)をローカルに作ります(そしてその後サーバーで共有します)。そのためネットワークを介してサーバーと通信する集中型バージョン管理システムに比べて高速に動作します。どんなときでも、高速であることは快適さと密接に結びつきます。

秘密

バージョン管理システムは、成果物を他のメンバーに共有する(Git でも実際はサーバーに中心となるリポジトリを置いて運用します)ためにも使用します。しかし共有したい成果物の他に、自分だけのメモや資料をバージョン管理したいと感じることも少なくないでしょう。また作成してすぐ共有状態にするのではなく、より推敲を重ね、洗練した成果物のみをそうしたいと考えることもあるはずです。

Git には、いくつかのコミット(変更内容をリポジトリに登録すること。またはその変更した時点のことを指す場合も)を圧縮する仕組みがあります。作業の単位では細かくコミットを行い、共有するのは十分にこなれてきてから、ということができます。

Git ではブランチをかなり「基本的」な単位として使います。個人的なものを個人的なブランチに入れることもできます。

他には除外ファイルにスニペットを含めたり、stash に入れたり、共有したくないファイルを管理する手段もいろいろあります。Git はオフラインでも使えますから、何なら自分だけのリポジトリを作っても良いでしょう。というか、ある程度 Git に習熟した人はおそらくみんなそうしています。

共存

集中型バージョン管理システムを一種の「共有手段」と考え、ローカルの変更追跡に Git を使うという共存ができます。集中型バージョン管理システムでは、ファイルをリポジトリに含めた瞬間にそれが共有されます。共有したくないけれどもバージョン管理したいという使い方ができます(Git だけで運用する場合もこれは可能です)。

Git は他のバージョン管理システムの置き換えを目指して開発されたものではないとのことで(実際には置き換わってきていますが)連携ができるように作られています。サポンテは Git を使い始めてから SubVersion のチームに派遣されたことはないのですが、その時にこの「併用」ができるようにこれから準備していきたいと思います。