我正在尝试使用 git-svn 从颠覆中迁移。
现在我被失败阻止了
$ git svn fetch
在 Git.pm 的第 900 行失败(来自 git-svn 包)
...
my $read = read($in, $blob, $bytesToReadd);
在名为 cat_blob() 的子文件中,问题是该文件是 2567089913 字节,当 git-svn 到达 2147484672 时,它会因消息“Offset outside of string”而窒息。cat_blob 尝试将整个文件保存在一个变量中,然后再将其写入磁盘。
我尝试将文件的写入从 sub 的末尾移动到读取循环内,
(这是我修改后的代码的样子)
890 my $size = $1;
891
892 my $blob;
893 my $bytesRead = 0;
894
895 while (1) {
896 my $bytesLeft = $size - $bytesRead;
897 last unless $bytesLeft;
898
899 my $bytesToRead = $bytesLeft < 1024 ? $bytesLeft : 1024;
900 print $size, " ", $bytesLeft, " ", $bytesRead, "\n";
901 my $read = read($in, $blob, $bytesToReadd);
902 unless (defined($read)) {
903 $self->_close_cat_blob();
904 throw Error::Simple("in pipe went bad");
905 unless (print $fh $blob) {
906 $self->_close_cat_blob();
907 throw Error::Simple("couldn't write to passed in filehandle");
908 }
909
910 }
911
912 $bytesRead += $read;
913 }
但现在我得到一个新错误:
Checksum mismatch: root/Instruments/MY_DIR/MASSIVE_FILE.exe bca43a9cb6c3b7fdb76c460781eb410a34b6b9ec
expected: 52daf59b450b82a541e782dbfb803a32
got: d41d8cd98f00b204e9800998ecf8427e
我不是 perl 人。perl 是否在 print 语句中添加了额外的废话?有什么想法可以通过校验和吗?