ariyasacca

カテゴリ一覧

Biz | SF | Software | tDiary | Web | ゲーム | サバティカル | スポーツ | ミステリ | メタル | 健康 | 投資 | 携帯 | 時事ネタ | 死生観 | 資格 | 雑記
2004|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2010-08-14 (土) [長年日記]

[雑記]MercurialでSubversionの変更を追いかけながらオレオレブランチしたい

Subversionで管理されているプロジェクトのソースコードからMercurialでブランチを切って、変更を追いかけながらブランチを育てて、気に入らなかったら捨てたり、採用できそうだったら変更をSubversion側にプッシュしたりしたい時の図を描いてみた。

【図解】Subversionからhgsvnでインポート

hgsvnの準備

hgsvnをインストールする。新しいバージョンのものを使った方が良いので、OSで用意されたパッケージマネージャではなく、easy_installから入れる。hgimportsvn, hgpullsvn, hgpushsvnという名前のスクリプトがコマンドラインから使えるようになる。

$ easy_install hgsvn

Subversionリポジトリからインポートして開発用ブランチの準備

図に赤い線で描いた部分に相当する。ここではSubversionとの同期用リポジトリをmaster、開発用ブランチ(リポジトリ)をdevelというディレクトリで管理する。

まずインポートする。

$ hgimportsvn file:///path/to/repo/trunk master

masterは、Mercurialリポジトリであると同時に、まんまSubversionの作業コピーでもあるのだけど、.svn/などの存在は最初から無視リストとして管理してくれるので、Mercurial側からは意識しなくて良いようになっている。

最初は空っぽなのでhgpullsvnでSubversion側のチェンジセットを全て持ってくる。

$ cd master
$ hgpullsvn

ここから自分用の開発を進めるためのブランチを切る。

$ cd ..
$ hg clone master devel

これで準備は完了。後は青い線で描いたところが日常的な作業になる。

develでの作業

ここではひたすらコミットしたり、

$ hg commit

master側にSubversionの変更を同期していたら、取り込んだり、

$ hg incoming
$ hg pull
$ hg update

良い感じに仕上がったらmasterにプッシュを行う。

$ hg push

masterでの作業

develからの更新を反映したり、

$ hg update

Subversion側の変更を取り込んだり、

$ hgpullsvn

両者から変更があったときは、headが複数になるのでマージする。

$ hg heads
$ hg merge

極まれに衝突するので、編集してコミットする。

$ hg resolve -m file
$ hg commit

気に入った成果が出来上がったら、Mercurialのチェンジセットを1つにまとめてしまうオプションでhgpushsvnを実行すると、Subversionのリビジョン番号が1つしか増えないので良い感じである。-eオプションを付けるとエディタが起動してコミットメッセージを編集できる。utf-8どうのこうので怒られるときは日本語メッセージを消してしまうと良いかも。

$ hgpushsvn -c -e

このとき、Subversionリポジトリでsvn:keywordsによる自動置換をしていると、その変更が反映されるので、masterでもすぐにコミットしてdevelに取り込んでもらう必要がある。

$ hg commit

出来がイマイチで気に入らないときは、hgpushsvnせずにmasterごと綺麗さっぱり消してしまえば、Subversionリポジトリには跡が一切残らないので、気軽にオレオレブランチできる。

$ rm -rf master

参考

ここではSubversionリポジトリに自由なタイミングでpush, pullできる前提で書いているので、もっと厳密にSubversionメインラインとの差分管理を行いたい場合はRebaseとトピックブランチ: プログラマの思索を参考にすると良いかも。

図を描いたところ

Cacooというサービスを使って描いてみました。使い易いので皆も使おう!


最近のツッコミ

  1. ともお (2024-05-29(水)20:59)「真上からの恐怖🫨」
  2. いちごみるく (2024-05-29(水)20:59)「🩸」
  3. レモン (2024-05-29(水)20:59)「レモン」

参号館  の中の  日記(ariyasacca)

トップ «前の日記(2010-08-07 (土)) 最新 次の日記(2010-08-16 (月))» 編集