« Redmineとチケット駆動開発の感想を集めてみた | トップページ | PullRequestは分散バージョン管理の利点を生かしたパッチ取り込み »

2012/04/22

Mercurialリポジトリの統合と分割

Mercurialリポジトリの統合と分割のコマンドconvertの使い方がわかったのでメモ。

【元ネタ】
Mercurial の convert 拡張を用いてリポジトリの内容を一括で変換する (フェンリル | デベロッパーズブログ)

紹介マニアどらふと版: convert と filemap を利用した hg リポジトリの分割と統合

Mercurial リポジトリを分割する - ursmの日記

Convert でリポジトリを分解する / hg tip

schrome.net - Mercurialリポジトリへの分割と変換を行うシェルスクリプト

Mercurialリポジトリを統合したり分割したい理由は、新規開発や2次開発で一旦作ったものの、それらのライブラリを後からまとめたり、多すぎるので分割したりしたい時があげられる。
その場合、修正履歴もそのまま引き継ぐようにしたいが、Mercurialは履歴の引き継ぎも統合・分割時に行なってくれるので便利。

例えば、srcリポジトリをtargetリポジトリのsrcフォルダへ統合する場合は下記になる。
echo rename . src > map.txt
hg convert --filemap map.txt src target
cd target
hg merge
hg commit -m "srcを追加"

もちろん、CVS・SVN・GitなどのリポジトリをMercurialへ移行することも可能。
hg convert --helpを見ると、ほとんどのSCMに対応しているみたい。

hg convert [OPTION]... SOURCE [DEST [REVMAP]]

別 SCM のリポジトリから Mercurial リポジトリへの変換

Accepted source formats [identifiers]:

- Mercurial [hg]
- CVS [cvs]
- Darcs [darcs]
- git [git]
- Subversion [svn]
- Monotone [mtn]
- GNU Arch [gnuarch]
- Bazaar [bzr]
- Perforce [p4]

但し、tortoisehg-2.2.2-hg-2.0.2では正しく動作するが、tortoisehg-2.3.1-hg-2.1.1ではhg convertを実行するとエラーになるので注意。
Mercurialのバグかもしれない。

MercurialやGitを触ってみると、従来のCVSやSVNとは全く異なるバージョン管理ツールであるのがよく分かる。
過去の修正履歴を保持しながら、移行作業も可能だし、過去の修正履歴を改変することも可能だ。
そのような機能があるおかげでマージ作業も移行作業もRedoやUndoが可能になるので、失敗を恐れずに作業できる余裕が生まれる。

ツールが新しい使い方を提唱することで、アジャイルなソフトウェア開発を更に補強してくれる。
ツールがプロセスを改善していく。

色々触ってみる。

【追記】
Mercurial2.1.1ではsplicemapを使えばhg convertが成功するらしい。試してみる。

Twitter / @karbou_12: @akipii Hg 2.1.1だとconvertにはsplicemapオプションが必要です。2.1.2では直っているみたいです。 http://goo.gl/td6TO

mercurial-2.1.2.tar.gz: mercurial-2.1.2/i18n/ja.po | Fossies Archive


|

« Redmineとチケット駆動開発の感想を集めてみた | トップページ | PullRequestは分散バージョン管理の利点を生かしたパッチ取り込み »

Mercurial」カテゴリの記事

Agile」カテゴリの記事

コメント

Mercurial の 2.0.2 から 2.1.1 にかけての convert 系修正で、
単純な変換で失敗するのは issue 3205 関係だと思います。

http://mercurial.selenic.com/bts/issue3205

# 終端条件で上手いこと止まらない場合があるのかな?

投稿: 藤原克則 | 2012/04/22 19:30

◆藤原さん
ご指摘ありがとうございます。
「入門Mercurial」の方にお返事して頂き光栄です。
@karbou_12さんの指摘のように、Ver2.1.2がTortoiseHgに反映されれば問題ないようですね。

Issue 3311: convert: "invalid mode or filename" since 2.1.1 - Mercurial issue tracker
http://mercurial.selenic.com/bts/issue3311

投稿: あきぴー | 2012/04/22 20:24

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« Redmineとチケット駆動開発の感想を集めてみた | トップページ | PullRequestは分散バージョン管理の利点を生かしたパッチ取り込み »