Git hookと、HgからGitへの変換
gitのhookを使ってみた
やりたいのは、下記の3つのリポジトリがあって、
- bare
- remote1
- remote2
remote1を編集してbareにpushしたらremote2にもその変更を反映させたい。
bareからremote-bにpushする方法だと、remote2側でreset等を実施しない限りファイ ルが更新されないので、その方法ではうまくない。
ということで、bareリポジトリにpushされたらそれをトリガに、remote2側からpullす ることにする。
bare/.git/hooks にあるpost-receive.sampleをpost-receiveに名前を変える。 hookのタイミングとしてはpost-updateでもいいらしいが、こっちは使うなと書いてあ るのでpost-receiveを使うこととする。
# post-receive BARE_DIR=$PWD cd remote2_dir git --git-dir=.git pull $BARE_DIR
--git-dir=.git 重要。これでかなりはまった。
参考: @ Git で集中リポジトリーに push したら、自動でワーク・ディレクトリーにも反映させる
追記:今探したらそのものずばりのがみつかった。。。なんという。
フック(hook)を使ってコミットしたら自動的にデプロイするようにする - チナミニ
Hgからgitへの変換
ちょっと前までMercurialを使ってきたが、最近をgitを使うようになったらMercurial の使い方を忘れてきてしまって使いにくくなってしまったので、Mercurialのリポジト リをGitのリポジトリに変換してみた。
hg から git へファストエクスポート にあった"fast-export" を使ってみた。
最初Mercurialのリポジトリで、git initして、そこでhg->git変換を実施したらファイ ルがざくざく消えていってびっくりした。
なので、Mercurialのリポジトリとは別の場所にgit用のディレクトリを作って、そこに 変換した方がいい。
hg-fast-export.txtには、hg-reset.shがどうとか書いてあるけどこれはよくわからな いし、使わなかった。
> hg clone xxxx-hg > mkdir xxxx-git > cd xxxx-git > git init > hg-fast-import.sh -r ../xxxx-hg > ls .git
.git以下が作成されるだけなので、以下の用にcloneして使った。
> cd .. > mkdir git-remote > cd git-remote > git clone ../xxxx-git
と、まぁこんな感じ。



