Sono bloccato con un problema molto semplice ma fastidioso e non riesco a trovare la risposta su Internet. Spero che sarai in grado di indicarmi cosa ho fatto di sbagliato.Decodifica oggetti git/Errore "La lunghezza del blocco non corrisponde al relativo complemento"
Sto cercando di decodificare l'oggetto dal repository Git. Secondo ProGit, il nome del file e il suo contenuto sono stati sgonfiati durante il commit.
Sto usando C# per leggere l'oggetto indicato da SHA1 in un flusso, gonfiarlo e convertirlo in array di byte. Ecco il codice:
using System.IO.Compression;
static internal byte[] GetObjectBySha(string storagePath, string sha)
{
string filePath = Path.Combine(storagePath, "objects", sha.Substring(0, 2), sha.Substring(2, 38));
byte[] fileContent = null;
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (MemoryStream ms = new MemoryStream())
{
using (DeflateStream gs = new DeflateStream(fs, CompressionMode.Decompress))
{
gs.CopyTo(ms);
}
fileContent = ms.ToArray();
}
}
return fileContent;
}
Quando gs.CopyTo(ms);
viene raggiunto l'errore di runtime si è verificato: Lunghezza blocco non corrisponde con il suo complemento.
Perché così?
Per quanto riguarda il contenuto del file che sto cercando di leggere ... E 'binario ed è stato creato da eseguibile git. Il nome del file originale è testfile.txt
, il suo contenuto è Sample text.
lo SHA1 è 51d0be227ecdc0039698122a1513421ce35c1dbe
.
Qualsiasi idea sarebbe molto apprezzata!
Grazie, questo è stato veramente utile! – shytikov