コミット前のスクリプトで、同じリポジトリ内の任意のパス/リビジョンに対してコミットされた変更の差分を取得するにはどうすればよいですか?
たとえば、内のファイルへの変更がコミットされると、コミットされた (まだリビジョンではない)/trunk
の差分を取得したいと思います(これは のブランチです)。/trunk
/branches/feature_x
/trunk
私が知る限りsvnlook diff
、そのトランザクションによって提案された変更のみが表示されますが、トランザクションではsvn diff
なくリビジョンでのみ機能します。
力ずくの方法は、変更されたすべてのファイルの " svnlook cat ...
" と " "の出力を比較することです。svn cat PATH:REV
ただし、それはかなり非効率的であり、フック スクリプトに含めたいとは思わないものです。
バックグラウンド:
特定のディレクトリへのすべてのコミットを拒否し、ブランチの再統合によってのみ変更を許可するプレコミット スクリプトを作成しようとしています (関連記事:プレコミット スクリプトでブランチの再統合またはマージを検出する)。
これまでのところ、ベース ディレクトリのプロパティをsvn merge
調べることで の使用を検出できるようです。svn:mergeinfo
ただし、マージによって適用されたファイルの変更と手動で行われたファイルの変更を区別することはできないため、マージ後の編集は検出されません。
コミットされたトランザクション ツリーをマージのソースと比較して、余分な変更が加えられていないことを確認できるようにしたいと考えています。(私たちのプロジェクト ポリシーに従って、すべての競合の解決は再統合の前にフィーチャー ブランチで行われるため、後で変更する必要はありませんmerge --reintegrate
) /trunk
。