2

コミット前のスクリプトで、同じリポジトリ内の任意のパス/リビジョンに対してコミットされた変更の差分を取得するにはどうすればよいですか?

たとえば、内のファイルへの変更がコミットされると、コミットされた (まだリビジョンではない)/trunkの差分を取得したいと思います(これは のブランチです)。/trunk/branches/feature_x/trunk

私が知る限りsvnlook diff、そのトランザクションによって提案された変更のみが表示されますが、トランザクションではsvn diffなくリビジョンでのみ機能します。

力ずくの方法は、変更されたすべてのファイルの " svnlook cat ..." と " "の出力を比較することです。svn cat PATH:REVただし、それはかなり非効率的であり、フック スクリプトに含めたいとは思わないものです。

バックグラウンド:

特定のディレクトリへのすべてのコミットを拒否し、ブランチの再統合によってのみ変更を許可するプレコミット スクリプトを作成しようとしています (関連記事:プレコミット スクリプトでブランチの再統合またはマージを検出する)。

これまでのところ、ベース ディレクトリのプロパティをsvn merge調べることで の使用を検出できるようです。svn:mergeinfoただし、マージによって適用されたファイルの変更と手動で行われたファイルの変更を区別することはできないため、マージ後の編集は検出されません。

コミットされたトランザクション ツリーをマージのソースと比較して、余分な変更が加えられていないことを確認できるようにしたいと考えています。(私たちのプロジェクト ポリシーに従って、すべての競合の解決は再統合の前にフィーチャー ブランチで行われるため、後で変更する必要はありませんmerge --reintegrate) /trunk

4

1 に答える 1

0

「svnlook cat ...」と「svn cat PATH:REV」の出力を比較します

OS-diff は stdin から 1 つのファイルのみを受け入れることができます。両方を置き換えることはできません

汚い考え、解決策ではない

  • トランザクションの pre-commit フック コミット ファイルを追加の (メインとは関係のない) リポジトリと、2 番目のリポジトリの post-commit フックの diff ファイルに試すことができます。これにより、必要な結果が返され、repo 1 の pre-commit フックが呼び出されます (事前に作成されているローカル リポジトリとこのリポジトリの WC、トランザクション内のファイルを WC に保存、必要に応じて / を追加、コミット)
于 2013-02-01T21:49:43.030 に答える