友人と話していたら、水曜日は定時退社推奨日だよね、って話になった。そういえばそんな日だったかな。誰も実践していない気がするんだけどな…。
分散リポジトリ型のバージョン管理システムMercurialの簡単な説明と操作法を書きます。
そもそもバージョン管理システムって何さ?という話はしません。全て説明するのはここでは無理です。世の中には良い書籍がいっぱいありますんでそれを読んでね。
CVSとSubversionの差は色々あるけれど、リビジョンの考え方が激変しました。これは大事だと思うから説明します。
CVSではリポジトリに対する変更をファイル単位でコミットし、リビジョン番号もファイルごとに振ります。
一方Subversionはリポジトリ全体に対してリビジョン番号を振ります。ファイル一つ変更するだけでリポジトリ全体のリビジョン番号が上がるのです。
図中の丸印が「ある時点のリポジトリ」を表しています。リビジョンを何かに例えるなら写真の番号でしょうか。コミットは「リポジトリ全体を写真に撮って、番号(=リビジョン)を付けること」に相当します。
リポジトリには今までの全写真と番号が保管されていまして、好きな番号で写真を引っ張り出せます。二つの写真の間違い探し(diff)もできて、被写体(リポジトリ)がどれだけ変わったか(ファイルの追加、変更などの変化)が簡単に追跡できます。
便利な例を一つ。一週間前から今までの全変更点を追跡したくなったとします。
CVSですとリビジョン番号はファイル毎に付くので、一週間でファイルAはリビジョン100進んで、ファイルBはリビジョン1も進んでないなんてことが起こります。一週間前の状態に戻そうとすると、ファイル毎にどのリビジョンを見るべきかチマチマ調べなければなりません。
Subversionならば一週間前のリビジョン番号を調べ、そのリビジョンにリポジトリを巻き戻すだけ(update -r revision_number)です。すると全ファイルが当時の状態に戻ります。タイムマシンのようですね。
Mercurialもリポジトリ全体にリビジョン番号を振る方法を採ります。他のSCMもたぶんそうでしょう。
区別のためにMercurialの管理方法を分散リポジトリ形式、Subversionの管理方法を集中リポジトリ形式と呼びます。正式名称は知らないです。
集中リポジトリ形式ではリポジトリは一つだけです。利用者はリポジトリの一部をコピー(checkout)していじって、変更を反映(commit)したり、他者が行った変更を取り入れ(update)て使います。
Subversionはさらにローカルにリポジトリのキャッシュを持っていて、diffやstatusコマンド実行の際、リポジトリとの通信が不要です。この機能はリポジトリにアクセスできない状態(オフライン)でも使えるのでとても便利です。
Mercurialは分散リポジトリ形式の名の通り、リポジトリがいくつもあります。大きく3つの領域に分類できます。
以下の図でイメージを掴んでいただけるかと思います。
実はmercurialの場合、ローカルリポジトリと作業コピーが同一の場所にあります。実用上は便利なんですが。説明する側から見るとやりづらいっすね。
オフラインでリポジトリにcommitできること、これこそが分散リポジトリ型の最大の利点です。
絵から分かる通りupdateもできます。オフライン状態でローカルリポジトリを変更できるのは自分だけだから意味無い?なんてこと言うんですか…。updateの節で詳しく説明しますが、バージョン管理のうまみはupdateで巻き戻せる点に有ります。
作業コピーに対する変更点をローカルのリポジトリに反映させます。
pushできるのはリポジトリ同士なのでcommitしてからpushして下さい。そうでないと何も反映されません。
誰かが先にpushしていると、
$ hg push pushing to /home/user/test-a searching for changes abort: push creates new remote heads! (did you forget to merge? use push -f to force)
と警告されます。headとは最新状態のことです。ある地点を基点にブランチで枝分かれしていき、枝の末端が最新版となります。末端なのにheadというのも何だか変(※)ですけど、そういう用語なので仕方ないですね。
謎のキーワードheadがわかれば警告文の意味がわかります。このままpushすると最新の状態(head)が2つできるじゃない!何とかしなさいよ!!と言っているわけです。
図示すると以下のような感じです。
この状態を解消するためには「誰かの変更」を取り入れる作業(pullしてmerge)が必要です。詳しくはpull, mergeの節を見て下さい。merge後はcommitしないと作業が進められなくなりますよっと。
警告文曰く、ブランチを作りたいならpush -fで作れるそうです。
(※)個人的にはleafの方がわかりやすいと思いますが、歴史的な経緯でしょうか?
別のリポジトリにある変更点をローカルリポジトリに反映させます。さらに作業コピーに変更を反映させたければupdateをする必要があります。updateについては次節をご覧下さい。
作業コピーにローカルリポジトリの内容を反映させます。
他のリポジトリからpullした後は、通常はupdateをします。もし誰かが既に更新していた場合は「衝突」状態になります。その時は次節で説明するmergeを行って解決します。
別の使い方は「巻き戻し」です。○○という変更を入れる前に戻したい、1日前に戻したい、なんてことが簡単にできます。
他のリポジトリからpullした変更点をupdateしようとすると
abort: crosses branches (use 'hg merge' or 'hg update -C')
と、怒られることがあります。あなたがpullしたリポジトリに、誰かが先にpushしたことを表しています。
(ブランチの絵を入れます)
解消するためにmergeを行います。マージ用のプログラムが無い状態では、衝突したファイル名に .origが付加されてバックアップされます。
$ hg status M a.txt $ ls -1 a.txt a.txt.orig
$ cat a.txt a b c
$ cat a.txt a user a c
$ cat a.txt a user b c
同じ行を変更しているので機械的にマージが出来ません。するとマージプログラムは以下のようにlocal(自分の変更部分)と、other(他の人の変更部分)を示して、どちらか選んでよ、もしくは良い感じに修正してよ。
衝突したファイルはどうなるかというと、
$ cat a.txt a <<<<<<< local user a ======= user b >>>>>>> other c
修正後にcommitをお忘れ無く。
親リポジトリからpullした、あるいはcommitしたは良いけど、やっぱりやめたいときはrollback(またはundo) ができます。
ローカルのリポジトリを巻き戻します。最後にpull, またはcommitした部分まで戻りますが、二回以上は戻りません。
後で調べて書きたいこと。
とーどー(TODO)
オフラインコミットは便利d(・∀・)イイ!
昔はそう思ってました、今はリポジトリが散らばりすぎて何だかわからなくなった俺ガイル…なんてことにならないように、ある程度の規模を扱う予定ならば運用ルールを敷きましょう。
本格的に使ってないので予想の域を出ませんが、リポジトリが大量にできるうえに全リポジトリが平等なので、集中リポジトリ型よりめちゃくちゃになりやすい気がします。
Sena氏と買い出しに行って、野菜生活100を補充しました。元々あったやつと合わせて、40本くらいになった模様。意外と消費期限は長い(3ヶ月くらい)ので問題なし。
どかーんと冷蔵庫の上に積んでおいたら、同室の隣人が「なんか増えてません…?」って呆れてたけど、気のせい気のせいw
晩はびっくりドンキーで食ったんですが、40周年記念メニューを一押ししていました。まあいつもとおなじハンバーグですけど…。
イチゴミルクとマンゴージュースはおいしかったなあ。どちらも果肉成分がたっぷり入ってるのは良いんだけど、ストローで飲むと詰まって出てきませんよー!二人ともスムーズに飲めなさすぎて、途中からなんだか笑えてきたよ。
先日、同室の隣人からDVD返しておいてくださいな、と頼まれました。延滞してるから後で払います、よろしく〜と、彼は再び岡山へ旅立って行きました。いつも大変そうだなあ…。
で、そのDVDは本来昨日返すべきだったのですが、中の映画(ボーン・アルティメイタム)が気になって見てたら閉店時間を過ぎてしまった。余計に延滞してしまったぞ。
今日返したら4日延滞と言われ1,200円も取られた。延滞料金って高いのな…。
同期のSenaさんと寿司を食いに行きました。というか今更書かなくても毎週行ってますけど…。Senaさんは、寿司ばっか食ってる私に、飽きずによく付き合ってくれてありがたいです。
富田駅の近くにある権太呂寿司です。回らない寿司屋だけど2貫で126円(税込)と、値段は回転寿司並のリーズナブルさが良いのです。
最近はビントロばかり食ってます。あっさりなのかこってりなのか良くわからないこの感じが、何とも言えないぜ。
大下さんと北野天満宮(京都府京都市上京区)の骨董市に行きました。骨董市といっても特別なことは何もなくて、出店とフリーマーケットが混ざったお祭りみたいなもんです。
北野天満宮に来たのは初めてだったので、ついでに写真を撮りながら歩きました。
境内にも人が一杯。建物の中でご祈祷をやっていました。祈祷料は数千円と書いてありました。「面白そうだからやろう」と大下さんを誘ったのですが、高いから嫌って言われた…あっそ…。一人でやってもなんか虚しそうだよなあ。
店を一通り見たら疲れてしまった。社会人になろうとも体力のなさは変わらないのである。
おやつでも食べようかってことで中村軒(京都府京都市西京区)に行きました。桂離宮の近くにあります。かき氷が有名なお店なのだとか。
中村軒のかき氷(奥)、おうす(抹茶のこと、左)、白きんつば(手前)
大下さんが何度もここのかき氷はおいしいんです!と言ってましたが、正直かき氷なんてどれも大差ないと思ってました。しかし食べてみると違うもんですね。
いわゆるかき氷シロップではなくて、生の苺をすりつぶして作ったソースがかかっているのです。うまうま。
同期の皆さんとともに天橋立(京都府宮津市)に行ってきました。丹後の天橋立(京都府)、安芸の宮島(広島県)、陸奥の松島(宮城県)が日本三景と言われています。
天橋立は海流によって砂が運ばれ堆積した地形です。くちばしのような形状が多いことから、砂嘴(さし、砂のくちばし)と呼ぶそうですが、天橋立のように成長して対岸にくっついた場合は砂州(さす)と呼ぶそうです。
地理の話はそのくらいにして、まずは南側から対岸へ向けて、松林を北上しました。晴れていればとても素敵な散歩道だったでしょう。今日は雨のせいで何も見えません。
松林は軽く4kmほど続きます。景色がずっと同じで写真の撮りがいがありません。困ったもんです。
観光協会も気づいているのか、松林の退屈さをなんとかしようと道ばたにアームストロング砲を置いたり、変わった形の松に名前を付け(夫婦松など)たり、地元の伝承を事細かに語る看板を立てたりと、頑張ってます。
が、その努力も虚しく2kmほど行った地点でマンネリ感に満ちてきます。あとは 小1時間ずっと同じ景色、雨も相まって正直きついです。
傘を差していたのに傘から雨がしみ出していて肩から腕までびしょぬれ。さらにイラつくことに傘は新品、しかも300円よ?土産屋で買ったのが良くなかったな。素直に友達の折りたたみ傘を借りれば良かったと何度も後悔した。
途中にあった神社が妙に金持ちです。建物はピカピカですし、手水舎にセンサーがついていて近づくと自動で出る、などという成金な仕掛けがありました。仕掛けが面白かったので動画で撮りましたが、私のキモい話声が際限なく入ってたので公開はやめときます。
山の上からなら見えるだろうと一縷の希望にすがり、ロープウェーに乗り、展望台へ。…うむ、空も海も橋もへったくれもない。なにも見えん。
近くに居たおばちゃん達と「一瞬でも良いから晴れないかねえ…。」なんて話しつつ、霧が晴れるのを待ちましたが晴れる気配なし。悲しいけど風邪を引く前に撤退。
一番マシな写真がこれです。肉眼でもこんなもんでした。残念。チャンスがあればもう一回行くべきだな。
社会人2年生になって、基本給がレベルアップしました。しかし前年度より手取りが下がります(来月から住民税を取られる)。
今年の住民税の所得割額は「昨年の総所得」から決まります。つまり今年の所得に対してかかる住民税は、来年納めるわけです。実に1年も時間差をつけて攻撃(納税)されます。
サラリーマンはあまり問題ないかもしれませんが、仕事を変えるなど所得が大きく変化するとき、臨時で大きな収入があった年などは、住民税のことを覚えておかないと、翌年の時間差攻撃でひどい目にあうかも…。
阪急のドア横には「非常時に引くとドアが開きます」と注意書きされた箱があります。緊急時、すぐさま車両の外に避難しなければならない時に使います。
で、少し気になったのは「地下鉄内では使わないでください」という注意書きです。注意書きには残念ながら詳細な理由は書いていません。地下鉄のトンネルに出ると何か問題が起きるのだろうか?
私が思い当たる理由は給電方式の差です。地下鉄は地上の電車のように上から給電するタイプ(架線給電方式)と、レール近くの電線から給電するタイプ(第三軌条給電方式)があります。第三軌条給電の場合、トンネルへ下手に降りて電線(600V〜 くらい)に触れようものなら感電死します。
阪急は架線給電だから阪急が乗り入れる地下鉄も架線給電でないと走れません。架線給電なら、トンネル内に出ても危険はないはずです。しかし大阪市営地下鉄は第三軌条給電が多いらしく、阪急の時と同じノリで地下鉄から降りられると危ないので、全面禁止にしたのでしょう。
お陰で乗客は降りて良いトンネルにも降りられません。阪急もその辺は理解していると思いますが、乗客への説明&周知徹底する面倒くささには勝てないのでしょう。
知り合いに小泉という名字の人が居ます。最近は毎日と言って良いほど、彼の名を思い出します。
といっても意味深なことはなくて、通勤中に電車の窓から「こいずみがわ」と平仮名で書いた看板が見えるというだけです。位置は島本〜長岡京の間、JR京都線の北側(京都方面を向いて左手)にあります。川の脇にある緑色の看板です。
JR京都線はさほど混まないので、気づけば毎日同じような位置に立ち、毎日同じような景色を見るようになっていた、ってなわけです。明日もまた同じように「こいずみがわ」を見るでしょう。
小泉川の写真でも撮って、その小泉君に見せたら面白いかなあ?と思ってたら、なんと既にこのページで上流〜中流〜下流(桂川と合流)まで、写真付きで詳しく紹介されていました。
うむむ…。世の中は広いんだぜ…。
< | 2008 | > | ||||
<< | < | 06 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | - | - | - | - | - |
合計:
本日: