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 を削除.