Eu atualmente examino apenas as diferenças reais usando um programa diff que ignora as alterações de mtime e whitespace:
#!/usr/bin/env ruby
require 'tempfile'
input2 = ARGV.pop || (
$stderr.puts("Usage: gconf-diff [opts] <file> <file>")
exit(1)
)
input1 = ARGV.pop
UNWANTED_PAT = /mtime="\d+"/
def copy_tmp(id, path)
t = Tempfile.new("gconf-diff-#{id}-")
File.open(path).each { |line| t.write(line.gsub(UNWANTED_PAT, '')) }
t.close
t
end
t1 = copy_tmp('1', input1)
t2 = copy_tmp('2', input2)
system('diff', *(ARGV + ['-B', '-b', t1.path, t2.path]))
exit($?.exitstatus)
Eu tenho o subversion usando isso executando svn diff --diff-cmd gconf-diff ...
. Eu reverti arquivos que não têm alterações significativas. No entanto, isso é um pouco estranho e não lida bem com arquivos em que apenas um ou dois itens foram alterados, mas uma dúzia de outros tem novos timestamps, já que todas essas alterações ainda estão comprometidas.