バージョン管理システム Mercurial を導入
バージョン管理システム Mercurial を導入することにしたんだ。
最近は git がよく話題にあがるね。
しかし以下を見ると
- Google CodeがGitではなくMercurialを採用へ − @IT
http://www.atmarkit.co.jp/news/200904/28/googlecode.html - 操作体系から見る、GitとMercurialの8つの違い: ニュースの社会科学的な裏側
http://anlyznews.blogspot.com/2010/12/gitmercurial8.html - SVNからMercurialに移行するべき8つの理由: ニュースの社会科学的な裏側
http://anlyznews.blogspot.com/2010/12/svnmercurial8.html
Windowsでは Mercurialのほうが向いているようなんだね。
実際、Cygwinに gitが導入できないことがあった。バージョン管理システムはラクをするためのものなのに、インストールが面倒では使わなくなってしまう。なるべく簡単に入れられるほうがいい。Mercurialは FreeBSD,Cygwinともラクにインストールできた。
あと実際に git使ってみたけどよく覚えられないだよね、コマンド名とか。
hgのほうが単語とか簡単だし、ほかのcvs,svnに概念が似ている。
hgって何?
hg とはMercurialのコマンド名だよ。ソフト名が Mercurial で、コマンドを入力するときは hg。
略になってないよww 略すなら mcr とかにするべきじゃないの。
Subversionは svnと略してるし、Bazaarは bzrだよ。
Mercury
とHydrogenは意味が同じ「水素」らしい。ならソフト名をHydrogenにすればいいようにも思うけどねの元素記号がHgだから、この2つの単語は同じということらしい。まあ気にしなくていいよ。実際入力してみると、確かに hg は入力しやすくていい。
ただ、git, hg ともに日本語ファイル名の問題があるんだ。
日本語Windowsではファイル名をShift_JISで扱ってしまうので、「表.xls」とか「ソ.txt」とかを扱えないらしい。あと、Windowsで入れたファイル名をLinux(LANG=UTF-8)で取り出すと文字化けするらしい(Windowsで入れたのをWindowsで取り出すぶんには大丈夫)。
これらの問題はSubversion, Bazaarでは解決済みだそうだ。
じゃあ今からSubversionを使うのもありだね。
でもSubversionはインストールも面倒(FreeBSDでは)だし、分散型じゃないから使うのが面倒だし、遅いからな。
分散型はネットワークにつながってなくても利用できるし、ローカルでデータ保存するので早い。
じゃあBazaarは?
遅いらしいし、文字コード関連もまだ完全ではないようだ。
【bzr】Bazaarでバージョン管理 Rev 2
http://logsoku.com/thread/hibari.2ch.net/tech/1265951333/482-
へえー、Macは「が.mp3」というファイル名を「か゛.mp3」と格納するのか。
日本語ファイル名は私も既に使ってるんだ。具体的には
http://ai11.net/2010/romakananico/teto/
とか。
これは UTAU音源がもととも「あ.wav」とかのファイル名だからそれをそのままコンバートしただけだが。
ただしFlash CS3(Flash Player 9)/Flex SDK 3でswf作成すると、文字コードとしてShift_JISの日本語ファイル名しか読まないんだ。Windowsだけじゃなく、Linux/FreeBSDサーバ上でも文字コードがUTF-8では読み込まない。Shift_JISの文字コードでWebサーバにアップロードしないと動かないのさ。
だからファイル名を文字コード変換しないという git/hg の仕様は、実はこの場合ありがたい。svn/bzrが変換してUTF-8にすると動作しなくなるわけだから。
はあ。
でもその場合、ファイル名にはID番号振るだけにして、別のテキストでそのIDと かな文字 の対応表を記録したほうが安全だよ。
そうだね。でも日本語ファイル名が一番わかりやすくて正確なんだけどね。「きぇ.mp3」を kixe.mp3 や kile.mp3 とか書きたくはないし。
バージョン管理システムの選択の話に戻ると、
基本的にこういうのは、大勢の人が使っているのに乗ったほうがラクできるんだ。バージョン管理システムはずっと長く使ってこそ意味が出てくるわけだし。
そういう意味で、Mercurialは Googleさんがメインに採用しているのが大きい。
Git のほうがより将来安泰っぽくみえるけど、Mercurialもなかなかの安定ということですか。
私がインストールしたときの記録。
Windows XP への Mercurial インストール
http://sourceforge.jp/projects/gnupack/
で、gnupack (Cygwin + NTEmacsセット) を導入します。
$ apt-cyg install python $ apt-cyg install mercurial
これでOK。
FreeBSD 7.1 への Mercurial インストール
さくらのレンタルサーバ・スタンダードに入れます。
- FreeBSDのバージョン調査
uname -a
- Portsの所在を確認
http://www.freebsd.org/cgi/ports.cgi?query=mercurial&stype=all - wget ftp://ftp.sakura.ad.jp/pub/FreeBSD/ports/i386/packages-7.3-release/python/mercurial-1.4.3.tbz
pkg_add -P $HOME/local mercurial-1.4.3.tbz
- vi ~/.bashrc
export PYTHONPATH=$PYTHONPATH:$HOME/local/lib/python2.6/site-packages
を追加。 - vi ~/.hgrc で以下ファイルを作成。
[ui] username = Itou Hiro <xxx@users.sourceforge.jp> merge = emacs [merge-tools] emacs.args = --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")"
チュートリアル Mercurial
以下の日本語チュートリアルを見て、学びました。
http://mercurial.selenic.com/wiki/JapaneseTutorial
mergeのところではまった。
FreeBSDのマージプログラムには、コンソールで使えるEmacsを選びました。
Emacsのマージは、Ediffモードと Emergeモードがあるようです。どっちがいいのか‥。
以下のページによるとEdiffのほうが新しく、使い勝手もよいそうです。
http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/ediff.html
この画面の「Type ? for help」と表示のあるBuffer、ここにカーソルを置いて操作します。
「?」を入力するとヘルプ表示。もう一度「?」でヘルプ消す。
「n」で次の差分位置に移動。「p」で前の位置に戻る。
差分位置に「n」などで移動して、ハイライトされた箇所で、上の2つのBufferの左がA、右がBなんですが、'A' Bufferの内容にしたいなら「A」、'B' Bufferがいいなら「B」を押す。
手作業で直すこともできるとさっきのEdiff紹介ページに書いてありますが、どうするんだろ。
作業終わったら「q」→y→y→yで保存され、差分編集Bufferが消えます。C-xC-cでEmacs終了。
日常的な手順
$ hg init myprojdir
または
$ mkdir myprojdir $ cd myprojdir/ $ hg init
とすると、myprojdirディレクトリの下に .hgというディレクトリが作成されて、そこにMercurialデータが記録されるようです。
そのディレクトリはいつでも
$ hg clone myprojdir test1
としてコピーできるので、コピーしてからそっちでテストすれば hgの勉強がラクですね。
コミットするファイルをその myprojdirディレクトリに集めて、
$ hg st
すると、追加していないものは「?」つきで表示されます。
$ hg add
すると、追加されていないものは全部、コミット予定リストに「A」つきで表示され、次のコミットで追加されます。
$ hg remove a.jpg
すると、ファイルも消えて、コミット予定リストには「R」つきで表示されます。
$ hg mv a.jpg b.jpg
すると、ファイル名を変更。
$ hg commit -m "fix type"
すると、コミットします。
コミットメッセージを変えたいと思ったら、
$ hg rollback
でさっきのコミットをアンドゥ。(Mercurialではアンドゥは1回しかできない)
すぐに
$ hg commit -m "fix typo"
して再度コミットできました。
やべえデグレっちゃったよ、というときは前のバージョンとの差分をまず見ます。
$ hg tip
で最新バージョン、
$ hg log
で全バージョンの番号を見れるので、
$ hg diff -r10 -r11
で差分を見ます。
前のバージョンに戻すには hg revert。
前のバージョンを取り出すには hg checkout。
あとはブランチも学んでおきたい。
余談
ファイル変更管理システムを導入したいと考えていたんだけど、
音(wav,mp3)や画像(jpg,swfとか)などバイナリファイルをよく扱うため、どうせこれらはソース管理できないのでファイル変更管理システムは個人的には使わずにきました。
本日上書きして公開ファイルを開発中ファイルに書き換えてしまったりして、よしいい潮時だと
ファイル変更管理システムを導入、チュートリアルを実行。
仕事ではCVS,Subversion,Perforce,ClearCaseを使っていた。
- Perforce,ClearCaseは有償なのとサーバ立てるのが大変そうなので候補から除外。
- CVSはFreeBSDで唯一最初から入ってるのはよいが、複数ファイルの扱いなどやりにくい。undoもない。
- SubversionはFreeBSDに最初からは入ってないし、インストールがめんどう。動作も遅い。分散開発の対応が不明。
CVS,Subversion,Perforce,ClearCaseは使ったことがあるんだけど、
その印象としては
- CVS
- 各フォルダに「CVS」フォルダができて邪魔。使いにくい。
- Subversion
- Perforceに比べて動作が遅い。インストールが面倒(依存モジュールが多いので)。
- Perforce
- 早いし使いやすいけど有償。中央管理サーバに常につながっていないと使えないのはマイナス。P4サーバをさくらのレンタルサーバに立てられるのか不明(たぶん無理)。ローカルWindowsサーバにするとルータに穴あけないと‥などサーバ管理が問題。
- ClearCase
- Windows専用っぽいしインストール面倒。遅い。しかも有償で高価。利点が不明。ブランチが図示されるのが一部には好評らしい。
最近はgitがよく話題にあがります。gitは動作も速いらしい。分散開発というのもいろんなPC,OSで開発している個人には便利そうだ。
しかし
- Google CodeがGitではなくMercurialを採用へ − @IT
http://www.atmarkit.co.jp/news/200904/28/googlecode.html - 操作体系から見る、GitとMercurialの8つの違い: ニュースの社会科学的な裏側
http://anlyznews.blogspot.com/2010/12/gitmercurial8.html - SVNからMercurialに移行するべき8つの理由: ニュースの社会科学的な裏側
http://anlyznews.blogspot.com/2010/12/svnmercurial8.html
を見ると、WindowsではMercurialのほうが向いているようです。
Flash開発なんてWindows上でやりますから、こっちがいいかな。
チェンジセットが番号なのもMercurialのほうがよさそうだ。
あと実際に git使ってみたけどよくわからないんだよね、コマンド形態が。
hgのほうが単語とか簡単だしほかのcvs,svnに似ている。
ファイル名に日本語使ってる(あ.mp3, い.mp3とか)のもあるので、そういうのはBazaarがよいようですが、基本的にこういうのは大勢が使っているのに乗ったほうがラクできます。
MercurialはGoogleさんがメインに採用しているのが大きい。
Mercurialはソフト名(Mercurial)とコマンド名(hg)がちがうのが気にかかりましたが、ま いっか。Mercurialやってみますよ。
実はgitは、WindowsのCygwinへのinstallがうまくいきませんでした。FreeBSDでは問題なかったですけど。
MercurialはCygwin,FreeBSDでうまくインストールできたのでこっちにしました。
Windows XP
http://sourceforge.jp/projects/gnupack/
で、gnupack (Cygwin + NTEmacsセット) を導入します。
$ apt-cyg install python $ apt-cyg install mercurial
これでOK。
FreeBSD 7.1
さくらのレンタルサーバ・スタンダードに入れます。
- FreeBSDのバージョン調査
uname -a
- Portsの所在を確認
http://www.freebsd.org/cgi/ports.cgi?query=mercurial&stype=all - wget ftp://ftp.sakura.ad.jp/pub/FreeBSD/ports/i386/packages-7.3-release/python/mercurial-1.4.3.tbz
pkg_add -P $HOME/local mercurial-1.4.3.tbz
- vi ~/.bashrc
export PYTHONPATH=$PYTHONPATH:$HOME/local/lib/python2.6/site-packages
を追加。 - vi ~/.hgrc で以下ファイルを作成。
[ui] username = Itou Hiro <xxx@users.sourceforge.jp> merge = emacs [merge-tools] emacs.args = --eval "(ediff-merge-with-ancestor \"$local\" \"$other\" \"$base\" nil \"$output\")"
チュートリアル
以下の日本語チュートリアルを見て、学びました。
http://mercurial.selenic.com/wiki/JapaneseTutorial
mergeのところではまった。
FreeBSDのマージプログラムには、コンソールで使えるEmacsを選びました。
Emacsのマージは、Ediffモードと Emergeモードがあるようです。どっちがいいのか‥。
以下のページによるとEdiffのほうが新しく、使い勝手もよいそうです。
http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs21/ediff.html
この画面の「Type ? for help」と表示のあるBuffer、ここにカーソルを置いて操作します。
「?」を入力するとヘルプ表示。もう一度「?」でヘルプ消す。
「n」で次の差分位置に移動。「p」で前の位置に戻る。
差分位置に「n」などで移動して、ハイライトされた箇所で、上の2つのBufferの左がA、右がBなんですが、'A' Bufferの内容にしたいなら「A」、'B' Bufferがいいなら「B」を押す。
手作業で直すこともできるとさっきのEdiff紹介ページに書いてありますが、どうするんだろ。
作業終わったら「q」→y→y→yで保存され、差分編集Bufferが消えます。C-xC-cでEmacs終了。