2011-11-16 13 views
13

Voglio saperne di più sul funzionamento interno di git così mi sono imbattuto questi comandi:'git cat-file di -p <sha1>': 'fatale: Non un nome di oggetto valido' su oggetti casuali da .git/oggetti

cd .git/objects/62 

ls 
00cb2f01089db22aca24675272a16712e89747 
0ee798881329430bfef6c558be7b14c1f0676f 
1087f408e2f2bd782d53a1211a7418fee4f6a7 
a6a71f3bd5a3af882f3f0ec4fad4c672055746 
f95e69f344b52c5038d922260189475626e69a 

git cat-file -p 00cb2f01089db22aca24675272a16712e89747 

ed ha ottenuto il seguente errore:

fatal: Not a valid object name 00cb2f01089db22aca24675272a16712e89747 

Perché ho get it?

Ho provato come 10 volte (per file diversi da diverse directory all'interno di .git/oggetti) e ho ottenuto lo stesso errore.

Come posso visualizzare il contenuto effettivo dei file (sia esso un blob, albero o commettere)?

risposta

15

Non devono cd nel negozio oggetto .git, ma è necessario fornire la piena hash SHA1:

git cat-file -p 621087f408e2f2bd782d53a1211a7418fee4f6a7 

Git memorizza i propri oggetti in .git/objects, distribuiti in 256 cartelle per mantenere il dimensione della directory in basso. I primi due caratteri di ogni hash vengono utilizzati come nome di directory, i restanti 38 caratteri vengono utilizzati come nome file.

+0

ok, ma non quindi passare oggetto .git non rispondere alle mie domande ... Perché ricevo l'errore? e come vedo il contenuto effettivo dell'oggetto? –

+1

@IgorPopov: risponde alla tua domanda. Hai provato a visualizzare un oggetto che non esisteva. Dai un'occhiata da vicino al tuo hash e all'hash dalla mia risposta - vedi la differenza? – knittl

+0

Ho aggiunto alla domanda l'output effettivo da "ls". Come puoi vedere c'è ** NO ** file con il nome che inizia con "** 62 **". Il git cat-file fallisce con ognuno di questi file. Se è presente nell'output "ls", suppongo che esista ... –

Problemi correlati