NumRu::Misc の Git レポジトリについて

2015-03-18 堀之内 作成開始 2015-03-24 堀之内 追記

目次

リリース作業

タグについてのルール:

LICENCE.txt 中の期間の記述を確認し,現在の年までカバーしてなければ更新して commitする。

シェル変数設定

version=`grep VERSION lib/numru/misc/version.rb | sed -e 's/"\s*$//' -e 's/^.*"//'`
tag=v$version

Gem作成

rake build

リリース

rake release

これで,未コミット確認, タグ付け,RubyGemsへの送信が行われる。 タグ書式は v0.1.2 など ("v#{VERSION}")。

レポジトリセットアップの記録

作業日 2015-03-18

注意: git の新しい版では cvsimport 時に bare レポジトリを 作れるようだが,電脳サーバ上のは非対応なので一旦 non bare として作って,別途作った bare レポジトリからfetchする。

cvsimport

dennou-k にて.

$ cd /GFD_Dennou_Club/ftp/arch/ruby/products/numru-misc/
$ mkdir git_repos
$ cd git_repos

次の内容でカレントディレクトリに authors.txt を準備(先頭にスペースいれない)

horinout=T Horinouchi <horinout>

import 実行

$ mkdir tmp_gitimport
$ cd tmp_gitimport
$ mkdir numru-misc
$ cd numru-misc
$ git cvsimport -v -i -k \
   -d /GFD_Dennou_Club/ftp/arch/ruby/cvsroot \
   -A ../../authors.txt \
   numru-misc

bare レポジトリ作成と取り込み,設定

dennou-k にて.

bare レポジトリ作成

$ cd /GFD_Dennou_Club/ftp/arch/ruby/products/numru-misc/git_repos
$ mkdir numru-misc.git
$ cd numru-misc.git
$ git --bare init --shared=0664

取り込み

$ git --bare fetch ../tmp_gitimport/numru-misc master:master

レポジトリの名前設定. カレントディレクトリの description を設定する.

$ echo NumRu::Misc > description 

email送信設定

(GPhys の git を設定した時と違って,今回は post-receive.sample が hook 以下にない:いつの間にか出来なくなった? -- ともかくなしで乗り切る).

$ git config hooks.mailinglist "horinout@.., eriko@..."  # コンマ区切りでメアドを並べる
$ git config hooks.announcelist "horinout@.., eriko@..."  # 上と同じに
$ git config hooks.emailprefix "[DennouRuby git (NumRu::Misc)]"
$ cat config

$ cd hooks/

次の内容でカレントディレクトリにファイル post-receive を作成(先頭にスペースいれない)

#!/bin/sh

. $(dirname $0)/post-receive-email

パーミション変更

$ chmod +x post-receive 

post-receive-email をコピーして,カスタマイズ.

$ cp /usr/share/doc/git/contrib/hooks/post-receive-email ./post-receive-email.orig
$ cp /usr/share/doc/git/contrib/hooks/post-receive-email ./
$ chmod +x post-receive-email

ここでエディターを開いて差分が次のようになるように編集 (2015-03-24現在の設定)。

$ diff --expand-tabs -u post-receive-email.orig post-receive-email
--- post-receive-email.orig	2012-11-24 16:03:14.000000000 +0900
+++ post-receive-email	2015-03-24 14:05:41.223634961 +0900
@@ -1,5 +1,14 @@
 #!/bin/sh
 #
+################################################
+# Custermization
+#
+# * 2015-03-18 Horinouchi
+#   generate_email_header: simplified the first few lines of the email body
+# * 2015-03-24 Horinouchi
+#   modified email subject (deleted $projectdesc to include it in $emailprefix)
+################################################
+#
 # Copyright (c) 2007 Andy Parkins
 #
 # An example hook script to mail out commit update information.  This hook
@@ -232,7 +241,7 @@
         # Generate header
         cat <<-EOF
         To: $recipients
-        Subject: ${emailprefix}$projectdesc $refname_type $short_refname ${change_type}d. $describe
+        Subject: ${emailprefix} $refname_type $short_refname ${change_type}d. $describe
         MIME-Version: 1.0
         Content-Type: text/plain; charset=utf-8
         Content-Transfer-Encoding: 8bit
@@ -241,9 +250,7 @@
         X-Git-Oldrev: $oldrev
         X-Git-Newrev: $newrev

-        This is an automated email from the git hooks/post-receive script. It was
-        generated because a ref change was pushed to the repository containing
-        the project "$projectdesc".
+        Git repository "$projectdesc" has been updated.

         The $refname_type, $short_refname has been ${change_type}d
         EOF

httpで公開するための設定

レポジトリ上でアップデートがあった際に毎回 git update-server-info が呼ばれるようにする。 これは,上記の hook ディレクトリ上で

cp post-update.sample post-update

れば良い(∵ post-update.sample の中身は,コメント行以外は exec git update-server-info のみ)。

作業ディレクトリ削除

上で一時的に作成した作業用ディレクトリ tmp_gitimport を削除する。

手元にクローンを作って設定更新

作成者の手元のマシン(dennnou-kでなく)にて.

手元のマシンの適当なディレクトリ (git_reposとする) に clone を作成.

$ cd ~/davis/WORK/numru-misc/
$ mkdir git_repos
$ cd git_repos
$ git clone -v dennou-k.gfd-dennou.org:/GFD_Dennou_Club/ftp/arch/ruby/products/numru-misc/git_repos/numru-misc.git
$ cd numru-misc
$ git status

無視するファイルパターンを登録

$ 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.until201414
$ git commit -m "Renamed the current ChangeLog to back up."

変更を push する.

$ git push