履歴
概要
作業ディレクトリのない bare レポジトリとして作成する. cvsimport ではいきなりは bare レポジトリに import できないようなので,まず一時的なディレクトリに import し, 別途 bare レポジトリを作成して fetch する(bareの場合 fetchはpullと同じ).
dennou-k にて. 後で消すので一時的なディレクトリに import する.
$ mkdir /GFD_Dennou_Club/ftp/arch/ruby/products/gphys/tmp_gitimport $ cd /GFD_Dennou_Club/ftp/arch/ruby/products/gphys/tmp_gitimport
次の内容でカレントディレクトリに authors.txt を準備(先頭にスペースいれない)
horinout=T Horinouchi <horinout> seiya=S Nishizawa <seiya> takepiro=S Takehiro <takepiro> otsuka=S Otsuka <otsuka> mizuta=R Mizuta <mizuta> koshiro=T Koshiro <koshiro> daktu32=D Tsukahara <daktu32>
import 実行
$ mkdir gphys $ cd gphys $ git cvsimport -v \ -d /GFD_Dennou_Club/ftp/arch/ruby/cvsroot \ -A ../authors.txt \ gphys
dennou-k にて.
ディレクトリ準備
$ cd /GFD_Dennou_Club/ftp/arch/ruby/products/gphys $ mkdir git_repos $ cd git_repos $ mkdir gphys.git $ cd gphys.git
bareとして初期化.念のため ls でpermisionとグループを確認.
$ git --bare init --shared=0664 $ ls -la
fetchし,内容確認.
$ git --bare fetch ../../tmp_gitimport/gphys master:master $ git branch -a * master $ git log
注:bareだと git branch -a で master しか出ず(originがない; リモートから独立),merge しなくても master に取り込まれる.
dennou-k にて.
$ cd /GFD_Dennou_Club/ftp/arch/ruby/products/gphys/git_repos/gphys.git/
レポジトリの名前設定. カレントディレクトリの description を設定する.
$ echo GPhys > description
email送信設定.
$ cd hooks $ cp post-receive.sample post-receive $ echo '. $(dirname $0)/post-receive-email' >> post-receive $ cp /usr/share/doc/git/contrib/hooks/post-receive-email ./ $ chmod +x post-receive-email $ cd .. $ git config hooks.mailinglist "horinout@.., rmizuta@.., .." # コンマ区切りでメアドを並べる $ git config hooks.announcelist "horinout@.., rmizuta@.., .." # 上と同じに $ git config hooks.emailprefix "[DennouRuby git] "
確認
$ cat config
post-receive-email をそのまま使うと,本文の最初が詳し(丁寧)すぎて 逆になんの話かわかりにくいので,その中の generate_email_header 関数を 適宜編集して簡潔にした.また,tag 送信時に前回のタグ付与以降の log がつくのが(そこばかりに目がいって)却って分かりにくいので generate_atag_email の関係部分 (git rev-list --pretty=short "$prevtag..$newrev" | git shortlog前後) をコメントアウトした.
(2015-03-24追記) httpで公開するための設定
http での git clone を許すためには,git update-server-info が毎回実行されるようにする必要がある。そのためには上記の hook ディレクトリ上で
cp post-update.sample post-update
すれば良い(post-update.sample の中身は,コメント行以外は
exec git update-server-info
のみである)。
作成者の手元のマシン(dennnou-kでなく)にて.
ここでは,cvs から import して始めたどの Git レポジトリでもやりそうな設 定についてだけ書く.
ローカルの適当なディレクトリ (git_reposとする) に clone を作成.
$ cd git_repos $ git clone -v dennou-k.gfd-dennou.org:/GFD_Dennou_Club/ftp/arch/ruby/products/gphys/git_repos/gphys.git
gphys という名のレポジトリができるので cd
$ cd gphys
gitk でlog等を眺めてみる.
$ gitk
# 今回のには最後のコミットに cvs でつけたタグ gphys-1_3_0 がついている.
cvs から import した時点のスナップショットの記録としてタグ付ける.
$ git tag -a cvsimport -m "Snapshot when imported from CVS"
タグを確認 (git log の --decorarate=short オプションにより).
$ git log -3 --decorate=short
(gitkでも確認できる.)
無視するファイルパターンを登録
$ cat > .gitignore *.[oa] *~ *.so Makefile ChangeLog ^D
(先頭にスペースは入れない. ChangeLogは自動生成に切り替えるので無視ファイルに.)
$ git add .gitignore $ git commit -m "Registered files (patterns) to ignore in the repository"
ChangeLog を mv
$ git mv ChangeLog .ChangeLog.until201303 $ git commit -m "Renamed the current ChangeLog to back up."
通常は
$ git push origin master
ただしこれでは tag が送られない.tag を(他のcommitとともに)送るには次を実行
$ git push --tags origin master
特定のタグ (例:cvsimport) のみを(他のcommitとともに)送るには
$ git push origin master refs/tags/cvsimport
ChangeLog 自動生成の設定.以下の内容を .git/hooks/post-commit と .git/hooks/post-merge として設定
$ cat > post-commit #!/bin/sh git log --branches=master --date=short --name-status --pretty=format:"%ad %an%n%B" > ChangeLog ^D
(先頭にスペースは入れない)
$ chmod +x post-commit $ cp post-commit post-merge $ ls -ltr