感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

SubversionからのGit 事始め編

スポンサーリンク

かつてのデファクトスタンダードのVCS(バージョン管理システム)は、Subversionだった。
今や技術に敏感な人々から順にGitへの移行が始まった。

バージョン管理システムとは

プロジェクトのファイルに施した変更の追跡に役立つ手法やツールのことだ。
最も簡単なVCSは作業中のファイルのコピーを作って、日付を付けて保存しておくというものだ。
今でもSIerの一部のチームではこんな感じのバージョン管理(笑)をしている。が、江戸時代の人達は江戸で過ごせばいい。
現代に住む我々は話を進めよう。

このような江戸時代の手間がかかるバージョン管理のプロセスを自動化するために生まれたのがバージョン管理システムだ。
変更のコピーを保持することで、あらゆる変更を追跡してくれる。

リポジトリとは

リポジトリとは、施されたすべての変更をバージョン管理システムが追跡する場所のこと。
開発者はリポジトリから離れたところで作業して、ネットワーク接続を介して変更を送ったり戻したりできるようになった。
驚くことに、明治時代のSIerでは、ファイルサーバにソースを管理して、その管理台帳みたいなものがあったりする。
いちいちソースをコミット(?)するのにクソ面倒なExcel資料を書いて、よくわからない担当者にメールし、メールのフォーマットに不備があると差し戻され、ようやく正しいフォーマットでメールをすることで依頼したソースを格納することができるようになるのだ。さらに、ソースを戻したりするのも申請が必要だったりする。

リポジトリに何を含めるか

「○○がなかったら、このプロジェクトで自分の作業ができるだろうか?」と自問する。
その答えが「できない」なら○○をリポジトリに含めるようにする。
ただし、Antのbuild.xmlは含めるべきでも、Antのプログラム全体は含めるべきではない。
驚くべきことに、SubversionEclipseのインストーラを格納したアホがいるが、こういうのはいい迷惑である。

作業ツリー

作業ツリーとは、変更を加える場所のこと。
これがSubversionを使っている自分にはまだ実感としてわかりづらい。
「向こう側」に変更を加えるんじゃなくて、こっち側のローカルコンピュータに変更を加える。
別のサーバにあるリポジトリを見なくても、リポジトリの履歴を見たり変更箇所を確認できる。
こればっかりは使ってみないと実感沸かない。
リビジョンとかコミットとかは、Subversionと同じみたいね。意味合いは。それがローカルのリポジトリにコミットされる感じかな。
チェックアウト・・・作業ツリーを特定の時点のリポジトリに合わせること

で、変更を上流のリポジトリにpushすると。このcommit→pushってのが、Subversionとの違いっぽいね。
pushすることで、他の開発者と変更を共有できる。競合は発生しないんだろうか?と思っていたらそれを防ぐというか、Subversionとはちょっと違うアプローチをするみたい。

変更を取得(fetch)して、リモートリポジトリの変更を自分用にコピーする。
取得した変更を自分のローカルの履歴とmergeする。
変更とマージを1ステップで行うのがpull。なるほど。

マージするときは、競合に対処する仕組みがいくつか備わっていて、プログラムで判断できないものは人間の判断を待つ。
マージの管理もマージトラッキングという機能によって行う。

Gitのインストール

とりあえず手元のVMware Player上のCentOSにインストールしてみる。

ちなみに自分のパソコン(windows7)にGitをインストールしたことがあったのだが、これはGit on MSysなるものを使ってインストールした記憶がある。
で、ネットで調べていると色んな人が色んな苦戦をしていて、ビビっていたんだけど、ひとまずエラー出てもいいか、って考えで以下のコマンドを実行。

# yum install git

すると・・・

Complete!
# git --version
git version 1.7.1

なんとご丁寧に依存関係も解決して、無事にインストールできた。
あれ?もっと苦戦する予定だったんだけど・・・。

sudoの設定

http://linux.kororo.jp/cont/intro/sudo.php
を参考にさせていただきました。

参考にした本

入門git

入門git


このシリーズはSubversionでも本当にお世話になった。
非常に丁寧でシンプルでわかりやすい。

感謝のプログラミング

今回で感謝のプログラミングは【274時間目】
10000時間まで、あと【9726時間】
Ajaxの勉強もしてたので、それも含める。