전복에서 마이그레이션하려면 git-svn을 사용하려고합니다. 지금 내가크기가> LONG_MAX보다 큰 파일에서 git-svn 가져 오기가 실패합니다.
$ git svn fetch
의 실패에 의해 차단하고
서브라는 cat_blob에서
...
my $read = read($in, $blob, $bytesToReadd);
(힘내 - SVN 패키지에서)() Git.pm 라인 (900)에 실패 문제는 파일이 2567089913 바이트이고 git-svn이 2147484672가되면 "문자열 밖의 오프셋"메시지와 함께 질식합니다. 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 guy가 아닙니다. 펄은 print 문에 쓸데없는 것들을 넣었습니까? 어떻게 체크섬을 전달할 수있는 아이디어가 있습니까?
'print'가 출력하는 내용에'$ \'이 추가되지만 기본적으로 빈 문자열이며, 비어 있지 않으면 변경 이전에도 잘못된 파일이 생성됩니다. – ikegami
공식 git 트리에서이 문제를 해결할 수있는 패치를받을 수있었습니다. 이것은 여전히 야생에서 문제지만, 자식 1.8.3에서 수정되어야합니다 –