2009-03-16 43 views
8

私はバージョンコントロール(/trunk/version.ini)の下にあるversion.iniというファイルを作成しました 私は今投稿コミットフックを使ってそのファイルを最新バージョン。 しかし、私はどのコマンドがそれを行うことができるのかわかりません。投稿のコミットを投稿する

#!/bin/sh 

REPOS = "$1" 
REV = "$2" 

をしかし、どのように私は新しいリビジョンをせずに、そのファイルの内容を置き換えることができます:私は、これはparamsは私が知っていますか?それでも私のレポにこれらの変更がありますか?

UPDATE: 多分私はより詳細なexplinationを尽くす明らかになったhaventので:/ SVN /リポジトリ/プロジェクト/トランク/その中に私はそのversion.iniと呼ばれるファイルを持っている: は、私は、このレポを持っているとしましょうバージョン管理下にあります。私がしたいことは、すべてのコミットが新しいリビジョンにファイルを更新することです。現在のリビジョンは263ですが、そのファイルに263の書込みがあることを希望します。 そして、もし私がそのファイルを更新して、それをやりたいとは思っていないのであれば、彼らはうまく動作するので、あなたは答えのキーワードに答えることができません。

私は理にかなっており、助けてくれてありがとうと思います。 乾杯します

+0

質問が不明です。フックはサーバ側で何かするためのものです。リポジトリ内のファイルを更新するのは、クライアントからサーバーへのアクションです。 –

答えて

7

あなたが実際に望むのは、あなたのコミットを変更する方法ではありませんが、svn:keywordsのようなものです。残念ながら、 "Where's $ GlobalRev $?"というボックスで読むことができます。これは本当にあなたが望むことをするものではありません。代わりに、svnversionの出力を呼び出して解析するスクリプトを作成し、何らかの形でビルドの一部としてファイルに結果を入れなければなりません。あなたがコミット後のフックからコミット

を変更することはできません

:それはあなたがしてSVNのフックスクリプトで行うことはできませんができるかを考えることはまだ楽しいあなたのリテラルの質問に答えるために今

コミット後のフックが実行されるまでに、コミットはすでに(名前が示すように)ファイナライズされているため、ファイルの変更は問題になりません。この時点でのみ変更を検査することができます。

あなたは--transactionスイッチでsvnlookツールを使用して、事前にコミットフックからの保留中のトランザクションの内容を調べることができ、プリコミットフック

のいずれかから保留中のコミットを変更することはできませんしかし、それを変更することはできません。

プリコミットフックで任意の変更を行うことができた場合、サーバーは明らかにこれらの変更をsvnクライアントに報告する必要があります。それ以外の場合、クライアントは実際には異なるが、ファイルはコミットされたリビジョンにあると思うでしょう。 svnクライアントが報告された変更を受け入れると、の作業がコミットによって一掃される可能性があります。これは、バージョン管理システムで軽く置くのは驚くべき機能です。言うまでもなく、Subversionはこれを許さない。

5

リビジョン番号を変更することなく、レポの内容を変更する方法はありません。

解決策はファイルにspecial keywords(検索のためにsvn:keywordsを検索し、チェックアウトの間にそれらを置き換えることです)。これらの値はリポジトリから来ているように見えますが、リポジトリ内のファイルの表現は変更されません。

あなたはおそらく、$ LastChangedRevision $(または$ Rev $)を探しています。

別の解決策は、現在のリビジョンを決定するために、プロジェクトのルートディレクトリにsvn infoを使用し、ない一時ファイル(にあなたに追加することを置くものは何でもあなたのビルドツール/ Makefileの/にルールを追加することですレポ)。

+0

は動作しません...そのファイルを変更してキーワードを置き換える必要があります。 –

+0

svn:keywordsが正しく設定されていると、SVNがそれを行います。 –

+0

これは実際には存在しないリポジトリ内のものを見ることを可能にするフィルターのようなものです。 –