DCPAM の Git リポジトリのセットアップの記録

履歴

  • 2015-03-15 高橋芳幸(https://www.gfd-dennou.org/arch/ruby/products/gphys/develop/git_repo_setup.htm を基に新規作成)
  • 2021-10-09 高橋芳幸 更新

概要

共有ディレクトリは, 作業ディレクトリのない bare レポジトリとして作成する. また, リポジトリの文字コードは UTF-8 とする.

手順

  • 一時的なディレクトリに cvsroot をコピー
  • cvs2git を使って dump
  • git fast-import で Git リポジトリを作成

詳細情報

  • 共有ディレクトリは

    /GFD_Dennou_Club/ftp/library/dcpam/git_repos/dcpam.git

    とする

  • dcpam5 のみ Git で管理する.
    • dcpam は, これまでに cvs で dcpam0, dcpam1, ..., dcpam5, dcpam5-primitive を管理してきたが, ここでは dcpam5 のみ, dcpam のリポジトリとして Git で 管理する. 今後バージョン番号はタグで管理することとし, バージョンが上がっ ても (dcpam6 になっても) リポジトリ自体は新規作成しない. (dcpam5-primitive の扱いは要検討.)
  • master ブランチと develop ブランチを置く
  • commit ログの文字コードは UTF-8 とする.
  • リポジトリ内のファイルの文字コードは UTF-8 とする.

準備

at サーバ (dennou-k).

> cd /GFD_Dennou_Club/ftp/library/dcpam
> sg dcpam
> umask 002

後で消すので一時的なディレクトリを作成.

> mkdir tmp_cvs2git
> cd tmp_cvs2git

cvsroot を整理

at サーバ (dennou-k).

作業用に cvsroot をコピー

> cp -Rp /GFD_Dennou_Club/ftp/library/dcpam/cvsroot .

cvsroot を整理.

  • dcpam5 以外を削除
  • dcpam5 の中身を一段上のディレクトリに展開
  • CVSROOT ディレクトリを作成 (空ディレクトリで良い)
    • CVSROOT がないと, cvs2git が動かない

このように整理することで, dcpam5 のみ Git で管理する. dcpam0, ..., dcpam4 を 残しておくと, それらも Git リポジトリに含まれる.

> cd cvsroot
> ls -l
drwxrwsr-x  3 yot dcpam 4096  3月 13 14:18 CVSROOT
-rw-rw-r--  1 yot dcpam 1397  3月 14 10:00 SIGEN.htm
drwxrwsr-x  4 yot dcpam   65  2月 14  2014 dcpam0
drwxrwsr-x  8 yot dcpam  109  2月 14  2014 dcpam1
drwxrwsr-x 11 yot dcpam 4096  2月 14  2014 dcpam2
drwxrwsr-x  7 yot dcpam 4096  2月 14  2014 dcpam3
drwxrwsr-x  7 yot dcpam 4096  9月 24  2010 dcpam4
drwxrwsr-x 12 yot dcpam 4096  3月 14 11:37 dcpam5
drwxrwsr-x 10 yot dcpam 4096  2月 26  2012 dcpam5-primitive
> rm -rf CVSROOT SIGEN.htm dcpam0 dcpam1 dcpam2 dcpam3 dcpam4 dcpam5-primitive
> mv dcpam5/* .
> rm -r dcpam5
> mkdir CVSROOT
> cd ..

文字コード変換

> ruby mojicodeconv.rb

mojicodeconv.rb はこちら.

このスクリプトで, cvs リポジトリに登録されているファイルの文字コードを変換. この変換を行わないと, ファイルの文字コードが変換されない (commit ログは cvs2git の --encoding と --fallback-encoding に euc-jp を指定することで 変換される).

cvs リポジトリを git リポジトリに変換

at サーバ (dennou-k).

> cvs2git --version
cvs2git version 2.3.0
> cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=dcpam --encoding=utf-8 --fallback-encoding=utf-8 ./cvsroot

文字コードの確認

> nkf -g git-blob.dat git-dump.dat
git-blob.dat: BINARY
git-dump.dat: UTF-8

レポジトリ作成と取り込み

at サーバ (dennou-k).

ディレクトリ準備

> cd /GFD_Dennou_Club/ftp/library/dcpam
> mkdir git_repos
> cd git_repos
> mkdir dcpam.git
> cd dcpam.git

bareとして初期化.念のため ls で permision とグループを確認.

> git --bare init --shared=0664
> ls -la
drwxrwsr-x 7 yot dcpam  111  3月 15 01:57 .
drwxrwsr-x 3 yot dcpam   22  3月 15 01:57 ..
-rw-rw-r-- 1 yot dcpam   23  3月 15 01:57 HEAD
drwxrwsr-x 2 yot dcpam    6  3月 15 01:57 branches
-rw-rw-r-- 1 yot dcpam  129  3月 15 01:57 config
-rw-rw-r-- 1 yot dcpam   73  3月 15 01:57 description
drwxrwsr-x 2 yot dcpam 4096  3月 15 01:57 hooks
drwxrwsr-x 2 yot dcpam   20  3月 15 01:57 info
drwxrwsr-x 4 yot dcpam   28  3月 15 01:57 objects
drwxrwsr-x 4 yot dcpam   29  3月 15 01:57 refs
> cat /GFD_Dennou_Club/ftp/library/dcpam/tmp_cvs2git/git-* | git fast-import

確認

> git branch -a
* master
> git log

レポジトリの設定(config)

at サーバ (dennou-k).

> cd /GFD_Dennou_Club/ftp/library/dcpam/git_repos/dcpam.git

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

> echo "DCPAM (Dennou-Club Planetary Atmospheric Model)" > description 

post-receive フックの設定

post-receive フックを使って email 送信の設定.

> cd hooks

post-receive.sample と言うファイルがあるはずらしいが, 実際にはないので, 適当なところからコピーして post-receive に変更. ファイルはこちら.

ファイルを置いたら実行権限を与えておく.

> chmod 775 post-receive

その後の準備

> cp /usr/share/git-core/contrib/hooks/post-receive-email .
> chmod 775 post-receive-email

> cd ..
> git config hooks.mailinglist "yot@..., hogehoge@..,"  # コンマ区切りでアドレスを並べる
> git config hooks.announcelist "yot@.., hogehoge@.., .."  # 上と同じ
> git config hooks.emailprefix "[DCPAM git] "

確認

$ cat config

update フックの設定

update フックを使って下の項目を設定

  • push されるファイルの文字コードを UTF-8 に限定
  • commit ログの文字コードを UTF-8 に限定
> cd hooks

hooks/update を作成し, ファイルに実行権限を与えておく. ファイルの中身はこちら.

ファイルを置いたら実行権限を与えておく.

> chmod 775 update
> cd ..

post-update フックの設定

post-update フックを使って exec git update-server-info を設定.

hosts/post-update.sample を hosts/post-update に名前を変え, ファイルに実行権限を与えておく.

> cd hooks
> mv post-update.sample post-update
> chmod 775 update
> cd ..

手元にクローンを作って内容更新

at 手元の計算機.

こちらの個人設定を行う.

cvs2git した時点のスナップショットの記録としてタグ付けておく.

> git tag -a dcpam5-20150316-cvs2git -m "Snapshot when cvs2git is performed"

タグを確認 (git log の --decorarate=short オプションにより).

> git log -3 --decorate=short 

(gitkでも確認できるらしい.)

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

$ cat > .gitignore 
*.[oa]
*~
*.so
*.dvi
*.aux
*.idx
*.toc
depend
^D

(先頭にスペースは入れない.)

$ git add .gitignore 
$ git commit -m "Registered files (patterns) to ignore in the repository"

変更を push する.

push する.

> git push --tags origin master:master

(ふたつの master のうちの前者はローカル, 後者はリモートブランチを表すらしい. 参照)

ただし通常は

> git push origin master:master

でよい. tag を(他の commit とともに)push するには --tags が必要.

リポジトリ作成後の片付け

at サーバ (dennou-k).

> cd /GFD_Dennou_Club/ftp/library/dcpam
> rm -rf tmp_cvs2git

develop ブランチの作成

at サーバ (dennou-k).

develop ブランチを作成します.

> cd /GFD_Dennou_Club/ftp/library/dcpam/git_repos/dcpam.git
> git branch
* master
> git branch develop

確認

> git branch
  develop
* master
> git show-branch
! [develop] * change arguments of gwd module
 * [master] * change arguments of gwd module
--
+* [develop] * change arguments of gwd module
> git checkout develop

アーカイブのテスト

at サーバ (dennou-k).

> cd /GFD_Dennou_Club/ftp/library/dcpam/git_repos/dcpam.git
> mkdir ../dcpam5-20150316-cvs2git-mod
> git archive --format=tar --output=../dcpam5-20150316-cvs2git-mod/dcpam5.tar HEAD

HEAD は本来は <tag>. 最先端の場合は HEAD.

テストコンパイル.

> cd /GFD_Dennou_Club/ftp/library/dcpam/git_repos/dcpam5-20150316-cvs2git-mod
> tar xvf dcpam5.tar
> rm dcpam5.tar
> bash compile_with_pkgs.sh
> make doc
> make tags
> make distclean

make tags の意味はわかってない.

なお, make doc で出たエラーには下のように対応した.

  • TeX ファイル中 (の数式環境中) の全角コンマが原因でエラーが出たため, 当該 TeX ファイルの全角コンマを半角コンマに置き換えた.
  • platex の -kanji=euc を削除.