Bạn cần xác định trình điều khiển hợp nhất và khác trong cấu hình git của mình, sau đó sử dụng các thuộc tính để liên kết chúng với các tệp.
Điều này chỉ thực hiện nhập văn bản đơn giản trên các bãi chứa, vì vậy nó có thể tạo ra tổng số vô nghĩa. Bạn hoàn toàn sẽ cần phải kiểm tra công việc của mình để chắc chắn rằng nó đã làm điều đúng Nó sẽ mất tedium ra khỏi sự hợp nhất dễ dàng mặc dù.
Trong .git bạn/config:
[merge "sqlite3"]
name = sqlite3 merge driver
driver = merge-sqlite3 %O %A %B
[diff "sqlite3"]
name = sqlite3 diff driver
command = diff-sqlite3
trong.gitattributes:
signons.sqlite diff=sqlite3 merge=sqlite3
Và đâu đó trong đường dẫn của bạn, tên 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 [email protected];
}
cũng trong đường dẫn của bạn, tên 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 [email protected];
}
Tôi chỉ hack những lên ngay bây giờ, bây giờ vì vậy bạn có thể phải ủi ra các kinks.
xem: http://git-scm.com/docs/gitattributes và http://git-scm.com/docs/git-config
Nó có thực sự hợp nhất không? Nghĩa là, tệp sẽ thay đổi khác nhau trên hai nhánh riêng biệt? –