このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

分散バージョン管理系Mercurial:rename って何の意味があるの?

Mercurial、こんなことも知らなかったの?>自分」シリーズ第4弾(つうほどのものか?)

  1. ナルホドー! 使って分かった Mercurial と Bitbucket の便利さ - 檜山正幸のキマイラ飼育記
  2. 分散バージョン管理系Mercurial こんなことも知らなかったの?>自分 - 檜山正幸のキマイラ飼育記
  3. Bitbucketの長時間ダウンで思ったよ、分散バージョン管理系ってほんとに素晴らしい! - 檜山正幸のキマイラ飼育記

今日の話題は、hg rename。これは、ファイルをコピーしてから削除します。ディレクトリに対して hg rename しても、ディレクトリ自体のリネームはしないで、新しいディレクトリにファイルを順次コピー&削除。古いディレクトリは残ります。

これだけ聞くと、リネームをまたいでの履歴管理をやってないみたいに思えます。実際、僕は「リネームすると追跡できないのか?」と疑問を持っていました。もちろん、Mercurialはちゃんと追跡しています。

実験してみます。以下はCygwinbash。冗長なプロンプトは削っています。


$ cd ~/tmp

$ mkdir hg-test

$ cd hg-test/

$ hg init

$

これでリポジトリは完成。


$ echo hello > hello.txt

$ hg add hello.txt

$ hg commit -m 'hello created'

$ hg log
changeset: 0:c013cd2d0e3a
tag: tip
user: Masayuki HIYAMA
date: Thu Dec 17 16:15:28 2009 +0900
summary: hello created


$ hg rename hello.txt greeting.txt

$ hg commit -m 'renamed hello.txt --> greeting.txt'

$ hg log
changeset: 1:9167c2f03385
tag: tip
user: Masayuki HIYAMA
date: Thu Dec 17 16:17:23 2009 +0900
summary: renamed hello.txt --> greeting.txt

changeset: 0:c013cd2d0e3a
user: Masayuki HIYAMA
date: Thu Dec 17 16:15:28 2009 +0900
summary: hello created


$

と、これで、hello.txt が作られ、それが greeting.txt にリネームされました。


$ echo 'hello, world.' > greeting.txt

$ hg commit -m 'edit the file'

$ hg log greeting.txt
changeset: 2:8a4050fda097
tag: tip
user: Masayuki HIYAMA
date: Thu Dec 17 16:20:05 2009 +0900
summary: edit the file

changeset: 1:9167c2f03385
user: Masayuki HIYAMA
date: Thu Dec 17 16:17:23 2009 +0900
summary: renamed hello.txt --> greeting.txt


$

あらら、昔の名前(あるいは旧姓)の時代の履歴は出てきませんね。--follow(短縮形は -f)ってオプションを付けるんですね。


$ hg log --follow greeting.txt
changeset: 2:8a4050fda097
tag: tip
user: Masayuki HIYAMA
date: Thu Dec 17 16:20:05 2009 +0900
summary: edit the file

changeset: 1:9167c2f03385
user: Masayuki HIYAMA
date: Thu Dec 17 16:17:23 2009 +0900
summary: renamed hello.txt --> greeting.txt

changeset: 0:c013cd2d0e3a
user: Masayuki HIYAMA
date: Thu Dec 17 16:15:28 2009 +0900
summary: hello created


$

--follow オプションは、hg annotate でも使えます。