今更ながら気づいたこと。SVNのクライアントにリビジョンとしてHEADを指定する際、headでも受け付けてくれる。
十数年間HEADとタイプし続けてきたけど、SHIFTを押さえていた小指は働き損だったのか…。
今更ながら気づいたこと。SVNのクライアントにリビジョンとしてHEADを指定する際、headでも受け付けてくれる。
十数年間HEADとタイプし続けてきたけど、SHIFTを押さえていた小指は働き損だったのか…。
職場のコーディングルールでヘッダに$Data$を入れないとならないのだけれど、文字化けがうざい。どうもShift-JISのテキストにもUTF-8で曜日(月〜金)が入れられているようなのだけれど、これはWindows版のクライアントの問題? そもそも、今時Shift-JISなんて糞コードを使いたくないんだけど、これもルールなので自分ではどうにもならない。
で、どうにかならないかとググってみたところ、SVNのキーワード置換では、置換後の文字列の長さを制限できるとな。
$Date:: $のように書いておけば
$Date:: 2016-03-25 23:59:59 +0900#$のように曜日(月〜金)が挿入される前に置換後文字列を打ち切ってもらえる。
休日出勤していないことをさりげなくアピールしてみたw
SVNのレポジトリにコミット済みのバージョンのtar ballを作りたければ、単純にsvn exportしたものをアーカイブするだけだ。が、未コミットな変更を含む手元の作業コピーを、ちょっと固めて渡したい場合はどうするか? これまでは作業コピーのコピーを作ってから.svnを消して固めていたのだが、GNU tarには便利なオプションがあることに、今更気が付いた。
% tar zcvf foo.tar.gz --exclude-vcs working_copy
--exclude-vcsを付けるとバージョン管理システムのディレクトリを除外してくれるとのこと。ソースを見るとCVS, RCS, SCCS, SVN, git, Arch, Bazaar, Mercurial, darcsに対応しているようだ。
SVNで
src +-- program1 | +-- (reference to common) +-- program2 | +-- (reference to common) +-- commonのように、SVN管理下の別のディレクトリを参照したい場合、参照を作りたいディレクトリのsvn:externals属性を編集する。
% cd src/program1でエディタを起動し、
% svn propedit svn:externals .
../common commonと記述して
% svn updateすれば、program1の下にsrc/commonがチェックアウトされる。
参照先が同一レポジトリ内である必要はなく、
http://somewhere/trunk/common commonのように外部レポジトリでも指定可能。バージョン1.5より前はsvn:externals属性の書き方が違うので、いい加減に1.4とかを使うのはやめよう。
Doxygen等で生成されるドキュメントをSVNレポジトリに突っ込んでおこうとすると、意外と面倒くさい。最初のコミットはまあいいのだが、2度目以降、再生成したドキュメントで更新しようと思うと、その都度ファイルの増減に対応しなければならない。
SVNはサブディレクトリ毎に管理情報を持っているので、何も考えずにサブディレクトリを丸ごと削除してから再生成するわけにも行かない。で、結局
zsh% rm -f xx/**/*(.)こんな感じ。うっかり
% find xx -type f -exec rm {} \;とかやると.svn/の中のファイルも削除対象になってしまうので、これは絶対NG。
% svn add `svn status | gawk '/^\?/{print $2}'`
% svn remove `svn status | gawk '/^!/{print $2}'`
% svn commit
全自動化は怖いので1ステップずつ目視確認しながらやってるんだが、めんどいね。どいね。レポジトリに置いておくのは生成ツールの設定ファイルと実行バッチくらいにして、機械的に生成できるものはレポジトリに置かないのが正解なんだろうけど、誰もが生成ツールをインストールしているとは限らないから、これまためんどいんだ。
% svn mkdir foo次に、新たなディレクトリfooの中に新たなファイルをfoo.txt追加する。
% svn commit -m ‘made foo’
% echo foo > foo/foo.txtこの状態で、作業コピーの中のfooをbarにリネーム。
% svn add foo/foo.txt
% svn commit -m created foo.txt’
% svn mv foo barそして、このリネームをコミットしようとすると…
% svn commit -m renamed怒られる。怒られてコミットできない。
svn: Commit failed (details follow):
svn: Directory ‘xx/foo’ is out of date
% svn revert -R foo barそれから再びリネーム。
% rm -fr bar
% svn update
% svn mv foo bar今度は通る。
% svn commit -m renamed