%20%D0%B8%20%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%20%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B9.png)
Я держу большинство dot-файлов моего домашнего каталога под контролем ревизий, так что я могу легко перемещать изменения между любым из пяти или около того настольных компьютеров и десятками серверов, которые я использую. К сожалению, мой ~/.gconf
каталог немного мучителен, когда дело доходит до этого, потому что gconfd, похоже, очень любит вносить произвольные изменения пробелов и, что еще хуже, обновлять атрибуты mtime="..."
в записях, которые он не менял.
Есть ли у кого-нибудь мысли о хороших способах решения этой проблемы? Я бы предпочел никогда не фиксировать изменения пробелов или изменения времени, когда значение не изменилось, чтобы я мог легко отслеживать свои различия с течением времени.
решение1
Вместо того, чтобы сохранить каталог в git, вы пробовали сохранить дамп?
gconftool-2 --dump /
решение2
В настоящее время я изучаю только реальные различия, используя программу сравнения, которая игнорирует изменения mtime и пробелов:
#!/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)
Я использую subversion, запуская svn diff --diff-cmd gconf-diff ...
. Я возвращаю файлы, в которых нет существенных изменений. Однако это немного неудобно и не очень хорошо справляется с файлами, в которых изменился только один или два элемента, но дюжина других имеют новые временные метки, поскольку все эти изменения все еще зафиксированы.