Git/Mercurialを使いデスクトップとラップトップで作業する
technique
- TOP
- Old Archives
- Git/Mercurialを使いデスクトップとラップトップで作業する
GitやMercurialでの分散作業というのは、高度なユーザーやギークばかりでなく、多くの人にとってメリットのある手法だ。 デスクトップを母艦としてラップトップを使う人にとっては確実に意味のあることだろう。
基本的な話
まずいまいちど基本的な手法を確認しよう。 まず、基本となるリポジトリを作る。
Gitの場合
$ cd ~/Repositories/Myrepo.git
$ git init --bare
$ cd ~/Work
$ git clone ~/Repositories/Myrepo.git
Mercurialの場合yvarn
この違いは、Gitがワーキングツリーを持つリポジトリに対する同期を非推奨としていることによる。 そのため、同期するためにはベアリポジトリを作り、その上でワーキングリポジトリとしてcloneする必要があるのだ。
Mercurialの場合は特にそのような必要はなく、ワーキングツリーを持つリポジトリをcloneすれば分散作業できる。
ここでは話を楽にするためにMercurialを使おう。
デスクトップコンピュータのdragon.local
ホストの~/Work/Wyvarn
リポジトリを作ったとする。
この作業を外で続けたくなったので、ラップトップ(knight.local
)でこのリポジトリをcloneする。
$ cd ~/Work
$ hg clone ssh://jrh@dragon.local/Work/Wyvarn
Mercurialのsshアクセスはパス部が相対パスで始まっているものとみなすので注意してほしい。絶対パスで指定するためにはパス部を/
ではじめる必要がある。
過酷な作業を終え、充実の成果をあげた。では家に帰ってその成果を反映しよう。
$ cd ~/Work/Wyvarn
$ hg push
続きはデスクトップで。デスクトップでリポジトリのアップデートを反映する。
$ cd ~/Work/Wyvarn
$ hg update
変更に強い構成にする
だが、実のところこのようなシステムではファイルの配置が変わったり、ファイル名が変わったり、ホスト名が変わったりするのはよくあることだ。 そのたびにすべてのリポジトリを修正するのはかなりの手間がかかる。
これにはふたつの抽象化レイヤーの導入が有効だ。
まずは、ホスト名を、そのホストに依存したものではなく、専用の固定名を与える。
ホストが少ないのであれば/etc/hosts
ファイルで良いだろう。
192.168.2.100 repo
多いのであれば、dnsmasqを使うと良い。
続いてリポジトリへのパスを抽象化しよう。 これは、次のようにするといい。
# mount --bind ~jrh/Repositories /mnt/repo
その上で
/home/jrh/Work/Wyvarn -> /home/jrh/Repositories/Wyvarn
のような状態にしておけばいいだろう(実体の位置を間違えないように)。
そして、ラップトップでは
$ hg clone ssh://jrh@repo//mnt/repo/Wyvarn
のようにすればいい。