=begin JA
= DCPAM の Git リポジトリのセットアップの記録
履歴
* 2015-03-15 高橋芳幸(https://www.gfd-dennou.org/arch/ruby/products/gphys/develop/git_repo_setup.htm を基に新規作成)
* 2021-10-09 高橋芳幸 更新
== 概要
# comment out at 2015/03/24 by yot.
#((::))
#ここで書かれている内容はまだ「お試し」状態です.
#今後やり直す可能性があります.
#((::))
共有ディレクトリは, 作業ディレクトリのない 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 とする.
# コメントアウト (2015/03/27, yot)
#* master ブランチへの push は特定のユーザにのみ許可する.
== 準備
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 は((<こちら|URL:./TEBIKI.gitrepos.scripts/mojicodeconv.rb>)).
mojicodeconv.rb は((<こちら|URL:../../TEBIKI.gitrepos.scripts/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
#以下の一行は忘備録で残してあるだけ
# > cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=dcpam --encoding=euc-jp --fallback-encoding=euc-jp ./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
# > cp post-receive.sample post-receive
post-receive.sample と言うファイルがあるはずらしいが, 実際にはないので,
適当なところからコピーして post-receive に変更.
#ファイルは((<こちら|URL:TEBIKI.gitrepos.scripts/post-receive>)).
ファイルは((<こちら|URL:../../TEBIKI.gitrepos.scripts/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
#post-receive-email をそのまま使うと,本文の最初が詳し(丁寧)すぎて
#逆になんの話かわかりにくいので,その中の generate_email_header 関数を
#適宜編集して簡潔にした.また,tag 送信時に前回のタグ付与以降の
#log がつくのが(そこばかりに目がいって)却って分かりにくいので
#generate_atag_email の関係部分
#(git rev-list --pretty=short "$prevtag..$newrev" | git shortlog前後)
#をコメントアウトした.
=== update フックの設定
update フックを使って下の項目を設定
* push されるファイルの文字コードを UTF-8 に限定
* commit ログの文字コードを UTF-8 に限定
# コメントアウト (2015/03/27, yot)
# * 特定のユーザ以外からの master ブランチへの push を拒否
> cd hooks
hooks/update を作成し, ファイルに実行権限を与えておく.
#ファイルの中身は((<こちら|URL:./TEBIKI.gitrepos.scripts/update>)).
ファイルの中身は((<こちら|URL:../../TEBIKI.gitrepos.scripts/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 手元の計算機.
#((<こちら|URL:./TEBIKI.gitrepos.local.htm.ja>))の個人設定を行う.
((<こちら|URL:../../TEBIKI.gitrepos.local.htm.ja>))の個人設定を行う.
## 今回のには最後の commit に cvs でつけたタグ gphys-1_3_0 がついている.
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"
#ChangeLog を mv
#
# $ git mv ChangeLog .ChangeLog.until201303
# $ git commit -m "Renamed the current ChangeLog to back up."
=== 変更を push する.
push する.
# > git push --tags origin master
> git push --tags origin master:master
(ふたつの master のうちの前者はローカル, 後者はリモートブランチを表すらしい.
((<参照|URL:http://shoma2da.hatenablog.com/entry/2014/03/08/234523>)))
ただし通常は
# > git push origin master
> git push origin master:master
でよい.
tag を(他の commit とともに)push するには --tags が必要.
#特定のタグ (例:cvsimport) のみを(他のcommitとともに)送るには
# $ git push origin master refs/tags/cvsimport
== リポジトリ作成後の片付け
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 は本来は . 最先端の場合は 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 を削除.
=end JA