10

私は Subversion で外部の diff ツールを使用しています (Beyond Compare rules!)。優れた機能の 1 つは、diff プログラムを使用して、行った変更を確認しながらファイルに小さな編集を加えられることです。

しかしsvn diff、私のさまざまなプロジェクトでは動作が異なります。全体として、左側のファイルは、Subversion (ヘッド) に保存されている最新のリビジョンを含む一時ファイルです。ただし、右側のファイルが実際の作業ファイルである場合もあれば、作業ファイルの一時ファイルのコピーである場合もあります。最初のケースでは、diff プログラムに変更を加えることができ、それらは作業コピーに影響を与えます。2 番目のケースでは、一時ファイルを編集しているため、変更が失われます。

Subversion が作業ファイルに対して差分をとることもあれば、作業ファイルの一時コピーに対して差分をとることもあるのはなぜですか? 常に作業ファイルを使用するようにするにはどうすればよいですか?

4

3 に答える 3

12

これらのファイルに svn:keywords を設定していますか? そうである場合、Subversion は最初にこれらすべての展開されたキーワード 'unexpanded' を含む一時ファイルを作成します。これは、変更されていない場合でも、すべてのキーワード行が異なるものとして表示されるのを避けるためです。

たとえば、作業コピー内のファイルを BASE と比較すると、BASE ファイルにはキーワードが展開されていません (LF 行末も格納されます) が、作業コピー内のファイルにはすべてのキーワードが展開されます (CRLF とともに格納される場合があります)。ラインエンド)。そのファイルをローカルで変更していない場合、「svn diff」はすべての行を異なるものとして表示するか (行末が一致しない場合)、少なくともキーワードを含むすべての行が異なるものとして表示されます。予想。

于 2008-12-28T15:37:10.487 に答える
0

アクセスに問題があるのか​​もしれません。ファイルを読み取り専用に設定してみてください。svn が一時ファイルを開く場合、これはあなたの質問に対する 1 つの可能な答えです。この場合、使用しているエディター/IDE によってファイルが書き込み保護されている可能性があります。

于 2008-12-28T14:01:56.653 に答える
0

このメールでは、代替ソリューションについて説明しました。 $7 ではなく $5 を使用して、$svn diff の一時ファイルを作成しないようにします。$5 を渡すと、--diff-cmd を使用して $svn diff を実行するときに、tmp ファイルの代わりにローカル ファイルが使用されます。

私はそれを試してみました。ローカル ファイルと svn リポジトリのリモート ファイルを比較します。$5 に変更する前 ($7 から)。Meld は常に 2 つの一時ファイルを比較しています。

から:

$svn diff --diff-cmd=svn-diff-meld  -r 12345 ./dirToCompare

$ cat /usr/local/bin/svn-diff-meld
#!/bin/sh
# SVN Diff Wrapper for Meld

left="$6"
right="$7"
meld "$left" "$right"

宛先:

$svn diff --diff-cmd=svn-diff-meld  -r 12345 ./dirToCompare

$ cat /usr/local/bin/svn-diff-meld
#!/bin/sh
# SVN Diff Wrapper for Meld

left="$6"
right="$5"
meld "$left" "$right"
于 2020-06-12T11:58:00.423 に答える