Таблица SQLite с Мерзавцем, объединяющимся

Сериализаторы обычно требуют, чтобы объекты имели конструкторы по умолчанию.

Добавьте конструктор по умолчанию в Lecture и посмотрите, что произойдет.

6
задан git-noob 15 February 2009 в 09:10
поделиться

4 ответа

Я не убежден, что мерзавец является действительно инструментом для Вашего задания. мерзавец является распределенным инструментом управления исходным кодом, не инструментом репликации баз данных.

Единственное автоматическое слияние, которого будет делать попытку мерзавец, объединяется текстовых файлов. Файл журнала является (обычно) текстовым файлом, итак, почему бы не поместить это непосредственно в мерзавца и не в базу данных сначала?

7
ответ дан 8 December 2019 в 02:46
поделиться

Я сомневаюсь, что любая универсальная система управления версиями (мерзавец, svn, cvs, и т.д.) может обработать базу данных в способах, которыми Вы описали. Если Вы настаиваете на том, чтобы использовать мерзавца для слияния баз данных, Ваш лучший выбор состоит в том, чтобы преобразовать базу данных в текстовый файл, объединить текстовый файл и воссоздать базу данных. Например,

sqlite3 .dump > dump_file.txt

может создать все sql операторы, необходимые для переделывания базы данных, затем Вы действительно наполняете в выведенный файл, затем делаете sqlite базу данных с

sqlite3 newdatabase.db < modified_dump_file.txt

Необходимо смочь автоматизировать это использование своего рода рычага мерзавца (я не слишком знаком с мерзавцем).

5
ответ дан 8 December 2019 в 02:46
поделиться

Нет никакого способа объединить двоичные файлы правильно это в общем случае, таким образом, мерзавец не может и не делать этого.

С некоторым усилием Вы могли использовать мерзавца для управления версиями дампов базы данных, но за исключением очень простых случаев необходимо будет сделать больше, чем просто использование прямо выводит. Необходимо будет думать о том, как выведенные строки отсортированы на основе столбцов ключа по крайней мере. Еще Вы получите побочные конфликты или слияния, которые производят синтаксически допустимые дампы, представляющие базу данных мусора.

F.ex., если различные версии строки с тем же настраивают шоу в различных регионах строки различных версий дампа, мерзавец мог бы думать, что это разумный сохранило их обоих. Получающийся дамп имел бы два представления той же строки, которая не имеет смысла.

Короче говоря, Вы, вероятно, будете несчастной попыткой сохранить имеющее версию использование базы данных системы управления исходным кодом.

1
ответ дан 8 December 2019 в 02:46
поделиться

Вам необходимо определить пользовательские драйверы слияния и сравнения в вашей конфигурации git, а затем использовать атрибуты, чтобы связать их с файлами.

Это просто слияние текста на дампах, так что это вполне может привести к полному вздору. Вам обязательно нужно будет проверить его работу, чтобы убедиться, что он все сделал правильно Тем не менее, это должно избавить от утомления от простых слияний.

В вашем .git / config:

[merge "sqlite3"]
    name = sqlite3 merge driver
    driver = merge-sqlite3 %O %A %B

[diff "sqlite3"]   
    name = sqlite3 diff driver  
    command = diff-sqlite3 

в .gitattributes:

signons.sqlite diff=sqlite3 merge=sqlite3

И где-то на вашем пути с именем diff-sqlite3

#!/usr/bin/perl -w

use File::Temp  qw/ :POSIX /;
use IPC::Run qw/run/ ;

@ARGV == 7 or die sprintf 'wtf %s', join(' ', @ARGV);

my ($name, $x, $y) = ($ARGV[0], $ARGV[1], $ARGV[4]);

my ($a, $b);

eval { 
  $a = tmpnam();
  $b = tmpnam();

  run ['sqlite3', $x, '.dump'], '>', $a or die 'sqlite3 failed';
  run ['sqlite3', $y, '.dump'], '>', $b or die 'sqlite3 failed';

  print "diff-sqlite3 a/$name b/$name\n";
  run ['diff', '-u', $a, $b, '--label', "a/$name", '--label', "b/$name"], '>', \*STDOUT;   

  unlink $a;
  unlink $b; 
  1;
} or do {
  unlink $a if defined $a;
  unlink $b if defined $b;
  die $@; 
}

также на вашем пути с именем merge-sqlite3

#!/usr/bin/perl -w

use File::Temp  qw/ :POSIX /;
use IPC::Run qw/run/ ;

@ARGV == 3 or die sprintf 'wtf %s', join(' ', @ARGV);

my ($o, $a, $b) = @ARGV; 

print "MERGEING SQLITE FILES $o $a $b\n"; 


eval { 
  $ad = tmpnam();
  $bd = tmpnam();
  $od = tmpnam(); 

  run ['sqlite3', $o, '.dump'], '>', $od or die 'sqlite3 failed';
  run ['sqlite3', $a, '.dump'], '>', $ad or die 'sqlite3 failed';
  run ['sqlite3', $b, '.dump'], '>', $bd or die 'sqlite3 failed';

  run ['merge', $ad, $od, $bd] or do {
    my $newname = "$a.dump";
    my $n = 0;
    while (-e $newname) {
      ++$n;
      $newname = "$a.dump.$n";
    }
    print "merge failed, saving dump in $newname\n";
    rename $ad, $newname;
    undef $ad; 
    die 'merge failed';
  };

  unlink $a or die $!;
  my $err; 
  run ['sqlite3', $a], '>', \*STDOUT, '2>', \$err, '<', $ad;
  if ('' ne $err) {
    print STDERR $err;
    die 'sqlite3 failed';
  }  

  unlink $ad if defined $ad;
  unlink $bd; 
  unlink $od;
  1;
} or do {
  unlink $ad if defined $ad;
  unlink $bd if defined $bd;
  unlink $od if defined $od;

  die $@; 
}

Я только что взломал их прямо сейчас, так что вам, возможно, придется сгладить изгибы.

см .: http://git-scm.com/docs/gitattributes и http://git-scm.com/docs/git-config

17
ответ дан 8 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: