gpt4 book ai didi

git - SQLite 表与 Git merge

转载 作者:IT王子 更新时间:2023-10-29 06:24:39 26 4
gpt4 key购买 nike

我有一个存储在 SQLite 数据库中的日志文件,我想将其分发到 git 存储库中。

稍后我希望日志文件的更改自动与原始文件 merge 。

这行吗?自动二进制 merge 到 SQLite 文件中是否会更频繁地崩溃?

最佳答案

您需要在 git 配置中定义自定义 merge 和差异驱动程序,然后使用属性将它们与文件相关联。

这只是对转储进行了简单的文本 merge ,因此很可能会产生完全无意义的结果。您绝对需要检查它的工作以确保它做了正确的事情不过,它应该让简单的 merge 变得单调乏味。

在你的 .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/gitattributeshttp://git-scm.com/docs/git-config

关于git - SQLite 表与 Git merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com