- ベストアンサー
pre-commitでリビジョン番号を反映する方法
- pre-commitでコミット直前に作業コピーのrevision.txtの内容を書き換える方法で一応実現できたが、メンバー毎に作業コピーのパスが違う環境では使いづらい。
- コミット直前にリポジトリの中身を直接書き換えられることができれば、クライアント側の環境に依存しない形を実現できる。
- ソースコードに最新のリビジョン番号を埋め込みたい場合、別の方法があれば教えてほしい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>使用しているバージョン管理システムはSubversion1.6.11です。 RHEL5.x系…でしょうかね? サーバはLinuxってことでいいのでしょうか? Windowsだと下記の処理はちょっと面倒そうですから。 # Perlなり入れてあればフック用のバッチから呼び出すことで同等なコトは可能でしょうけど……。 クライアントからの1回のコミットでリビジョンが2つ上がる。 ということを許容できるのであれば、 post-commitフック辺りでrevision.txtを書き換えてコミットする。 とかいう方法も取れるかと。 post-commitでサーバ上の作業ディレクトリに一端チェックアウトしrevision.txtのみ書き換えてコミットするようなスクリプトを実行する。 post-commitではコミットされたファイルがrevision.txtだけの場合は上記のスクリプトを実行しない。 とか。 ただ、この場合…クライアントではコミットした後、更新を実施しないと面倒なことになる恐れが…。 # まぁ、他人がコミットしているのと同じことなので…運用でカバーしていただくしかないかも知れませんけど……。 コミットする人にrevision.txtの更新を強制する。とか… pre-commitでrevision.txtが正しく更新されているかチェックするスクリプトを実行する。 更新されていない場合は、エラーメッセージを表示(pre-commitで標準出力に出力する)してスクリプトの戻り値でコミットを中断できるハズです。 # エラーメッセージの文字コードって…クライアントとかに依存するんでしょ~かね? # どっかのリポジトリにアクセスした時にTortoiseSVNに文字化けしたエラーメッセージが表示されたことがあったような…。 ブランチやタグの作成でコミットされた場合…は除外する必要があったりしますから、どちらもその辺りは手間…かも知れませんね。 # svnlook changed辺りで…一応判定は可能かと思いますが。 運用的にアレですが、私なら後者の方法を採りますかね…。 『ただのインクリメント作業を強制させる。』というのがほんとにアレですが…。 pre-commitで…クライアントからのコミット対象外ファイルに手を出せる(リポジトリ内のファイルを書き換えして一緒にコミットできる)のであれば、今回の要件にはベストなんでしょうけど…。 revision.txtがリポジトリ内でどんな場所にあるのか不明ですし、リポジトリレイアウトについても不明です。 revision.txtの内容も不明…という状況ですので具体的なスクリプトについては書けませんが……。 フックスクリプト、実際に使ったことあるのはpre-revprop-changeくらいですしねぇ…。 ログメッセージの編集を許可する…という為だけに。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
#1 でも言われていますが, まずは何を使って「リビジョン管理」をしているか明らかにすべきでしょう. あと, 「リビジョン管理用のテキストファイル」で何をしたいのかがわからん. 「ソースコードごとにある」わけじゃないよね. Subversion の $Revision$ とかは「当該ファイルの」最新リビジョン番号, で OK です>#1. というか, そもそも Subversion はファイル単位でリビジョンを管理しているんだから「リポジトリツリー全体の最新リビジョン」というものが意味をなさない. しいて言えばブランチしてタグを貼るくらいじゃなかったかな.
- Wr5
- ベストアンサー率53% (2173/4061)
クライアントはなんでしょう??? TortoiseSVNなら「SubWCRev」でのキーワード置換とかありますが……。 >逆にソースコードに最新のリビジョン番号を埋め込みたい場合、別のよい方法があれば教えていただきたいです。 $Revision$などを埋め込んでおいて、コミット時に反映させる。 なんて手段もあるにはありますが…希望の動作とは少し違いますかねぇ。 # コミットしたファイルの最新リビジョン…だったハズ。 http://wiki.bit-hive.com/tomizoo/pg/Subversion%20%A5%AD%A1%BC%A5%EF%A1%BC%A5%C9%A4%CE%C5%B8%B3%AB
補足
すみません、記述がもれていました。使用しているバージョン管理システムはSubversion1.6.11です。 revision.txtの使用目的は、アプリケーションデプロイ時にアプリケーションのバージョンを自動更新したいためです。 現在はエクスポート時に、revision.txt生成スクリプトを介することで実現しているのですが、この方法ですと、スクリプトを介すことを知らない利用者が、チェックアウトした際に、revision.txtが生成されないという問題があるので、コミット時に都度更新できないかと考えています。 クライアントはTortoiseSVN、Subversiveなどが混在しているので、TortoiseSVN固有の機能は使いたくない、といったところです。 $Revison$ですと、そのファイルコミット時のリビジョンになってしまうので、ご指摘の通り、目的の動作とは少し違います。
補足
revision.txtの使用目的は、#1さんの補足欄に追記させていただきました。 >そもそも Subversion はファイル単位でリビジョンを管理しているんだから「リポジトリツリー全体の最新リビジョン」というものが意味をなさない. こちらに関してですが、ファイル単位で管理しているのはCVSで、Subversionはリポジトリツリー全体でリビジョンを管理しています。