我想使用git-svn從subversion遷移。git-svn獲取失敗的文件,其大小> LONG_MAX
現在我已被的
$ git svn fetch
失敗失敗上Git.pm的900線(從GIT-SVN封裝)
...
my $read = read($in, $blob, $bytesToReadd);
在副稱爲cat_blob
() 問題是該文件是2567089913字節,並且當git-svn到達2147484672時,它會掐住一條消息「Offset of string」。 cat_blob在將其寫入磁盤之前試圖將整個文件保存在變量中。
我試過文件寫入從子結束移動到讀循環內,
(這裏是我修改後的代碼看起來像)
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語句中添加額外的垃圾? 任何想法如何通過校驗和?
'$ \'被追加到'print'打印的內容上,但默認情況下它是空字符串,如果它不是空的,甚至在更改之前就會創建壞文件。 – ikegami 2013-02-19 23:25:22
我能夠得到一個補丁來解決這個官方的git樹。這仍然是一個問題,但它應該在git中修復1.8.3 – 2013-04-03 15:00:35