1

まず第一に、これが可能かどうかさえわかりませんが、それがどのように行われるかを知る必要があります。そうでない場合は、なぜそうではないのでしょうか。

Subversionリポジトリのコミットプロセス中の適切なタイミングで実行されるC#アプリケーションを作成したいと思います(事前コミット)。これにより、コミットする別のファイルが追加されます。

たとえば、Program.csとMain.csに変更を加えましたが、AssemblyInfo.csには変更を加えていません。AssemblyInfo.csまたはその他のファイルに強制的に変更を加えられるようにしたいと思います。

コミット後に起動するSharpSVNを使用してコンソールアプリケーションを作成し、ファイルを置き換えましたが、これによりリビジョン番号が増加しました。明らかに、それは理想的ではありません。

次に、pre-commitで実行されて何かを書き始めたSharpSVN内のSvnLookClientを見つけましたが、CopyFromPathが期待したものではないことに気付いたときに、行き止まりになりました。

    using (SvnLookClient client = new SvnLookClient())
    {
        SvnLookOrigin o = new SvnLookOrigin(@"\\server\repository");
        SvnChangedArgs changedArgs = new SvnChangedArgs();
        Collection<SvnChangedEventArgs> changeList;
        client.GetChanged(o, changedArgs, out changeList);
    }

または、C#の外部でこれを実行することもできますが、理想的には、データベーススクリプトでの実行など、他のタスクを実行するようにリポジトリサーバーに指示できるように、C#コンソールアプリケーションで実行したいと思います。

4

1 に答える 1

9

フックスクリプト中にトランザクションを変更してはなりません。メッセージを使用してコミットを拒否するか(stderrがクライアントに送信されます)、コミット後の別のコミットでそれを行うことができます。

[編集]トランザクションの変更が悪い考えである理由を明らかにしたい(svn-技術的に):

クライアントはそれについて何も知りません。

「OK」、「FAILED」、およびstderr出力を除いて、コミット中にサーバーからクライアントへのバックチャネルはありません。

クライアントが変更をコミットし、コミットが成功したと報告されると、ローカルファイルとフォルダーのステータスがリポジトリバージョン[xyz]と同期していることを示します。後で何かを変更するとき、たとえば、ファイルをローカルに追加すると、それらの変更をコミットしたいのですが、それでは...まあ、何が起こるかを知ることができます。「チェックサムエラー」または「ファイルがすでに追加されています」に沿って何かが予想されます。 。変更の種類によっては、フォルダを削除して損傷した部分を新たにチェックアウトするよりも、WCが機能する可能性が高くなります。

それが技術的な部分でした。開発者側:まず、変更を自動的に正しく修正するのは賢明なようですが、ソースが事前に計算可能であれば、開発者に書き込ませる必要がないという単純な事実のため、失敗します。開発者に正しいことをしてもらいたい。

これは教育を通じて最も効果的に機能します。彼らは正しいことが何であるかを知る必要があります。彼らに何かを知ってもらうための良い手段は、どんな種類の古き良き訓練に加えて、彼らにフィードバックを与えることです。

svnサーバーからのエラーメッセージ、壊れたビルドまたは単体テスト後の自動メール、静的ソースコード分析ツールからの結果なども、優れた教育ツールとして役立ちます。

継続的インテグレーションを使用し、そこでソースツリーを検証することをお勧めします。これには、開発者が長い作業日後に変更をコミットするためにブロックされないという利点がありますが、それでもソースツリーのステータスはわかっています。

そして、私は今、あなたが達成しようとしていることを推測します。サーバー側のソースツリーは常に「機能的」でなければなりません。問題は、自動ファイル修正、事前コミットユニットテスト、スタイルチェックなどを使用しても、最後に、古いスタイルのシステムテストによってプログラムが実際に機能するかどうかをチェックする必要があることです。つまり、基本的に、実際には何も得られません。

テクノロジーはプロセスをサポートできますが、よく考えられたツールはそれを非常によくサポートしているため、プロセスに従うことで、開発者は時間を節約し、ワークフローを簡素化できます。しかし、テクノロジーは通常、プロセスを置き換えることはできず、人間の知性を置き換えることはできません(少なくとも今のところ)。[/編集]

于 2009-08-28T16:07:17.347 に答える