Subversion(svn)で外部参照ファイルを含む差分を表示する。

これで。

 

svn st -q | grep '^[AM]' | cut -c9- | xargs svn diff

version control - svn diff doesn't show modified external files - Stack Overflow


外部参照を多く含むリポジトリからチェックアウトして、どのディレクトリが外部参照なのかも怪しいまま編集し、いざコミットする段になって差分チェックができずに困った場合のために。

 

リンク元でも一部説明がありますが、svnの外部参照ファイルをローカルでいじった場合、`svn di(ff)`では表示されてくれませんし、`svn ci`でもコミットされません。
こうした外部参照ファイルの差分の表示やコミットは、`svn di FILEPATH`や`svn ci FILEPATH`と明示的にファイルパスを明示してあげないとできないみたいです。

一方で、`svn st(atus)`を使用すると、実ファイルでも外部参照でも関係なく編集済(M)フラグが立ちます。
これを使用して編集したファイルを特定し、それぞれのファイルを`svn di FILEPATH`で指定してあげているのが上記のコマンドです。

上記コードの一番最後の`svn diff`はよくある`svn diff -r head`(ヘッドリビジョンとの差分表示)とかに変更して使用することもできますし、なかなか使い勝手もよさそう。

外部参照を多く含むソースをいじるときに便利そうです。



そもそも外部参照を手元でぐちゃぐちゃイジるのはいかがなものなのだろうか??(疑問)

[20181202追記]
この方法で-r headをつけると、HEADとの差分があっても、BASEとの差分がない場合に表示されない問題点があります(BASEとの差分があれば、正しくHEADとの差分が出力されますが)。
この問題を回避するためには、

Subversion(svn)で外部参照ファイルを含む差分を表示する。(2) - 山田備忘録

こっちを使ってみてください。