Bien que les données blob estinviolable et sacrosanct, il est également dans un format inutilisable pour de simples mortels:
Comme j6t said in a comment, il est zlib-dégonflé (mais cela est un détail de mise en œuvre, pas une promesse , c'est-à-dire que vous n'êtes pas supposé juste l'ouvrir et le lire et utiliser un inflateur zlib pour le restaurer, vous êtes supposé laisser Git faire cela pour vous).
Comme Leon said in a comment, il peut avoir été emballés, auquel cas il n'y a pas de fichier objet non emballé pour ouvrir et lire en premier lieu. Au lieu de cela, vous devez ouvrir les fichiers d'index du pack (pour trouver le bon fichier pack) puis le bon fichier pack (pour trouver les données d'emballage avec le répertoire qui localise l'objet et ses bases), puis annuler le style xdelta, mais not actually xdelta, la compression de ces éléments.
Si vous voulez lire le fichier avec les commandes de plomberie, vous pouvez d'abord trouver le hachage:
$ git rev-parse HEAD~20:Makefile
bdb55792f11a9f9565c4aad147a492caed7f09c3
puis utilisez git cat-file -p
pour extraire l'objet brut ou git cat-file -t
pour obtenir son type (ou --batch-check
pour lire des informations sur l'objet, etc.). Notez que vous pouvez en fait juste passer le chemin directement à git cat-file
lui-même ainsi:
$ git cat-file -t HEAD~20:Makefile
blob
Notez, cependant, un bloc de trébuchement plus de potentiel: lors de l'accès au contenu d'un blob soit git cat-file -p <blob-specifier>
ou git show <blob-specifier>
, vous obtenez le format dans le référentiel des données. Autrement dit, lors de la vérification d'un commit spécifique (avec git checkout
), Git extraira un fichier .gitattributes
et/ou utilisera les paramètres git config
pour trouver les filtres de retouche et/ou les ajustements CR-LF à effectuer. Ces filtres sont appliqués aux données dans le référentiel pour produire la copie de l'arborescence du fichier. Mais lorsque vous utilisez git show
ou git cat-file -p
pour accéder aux données du référentiel, aucun filtre n'est utilisé.
Qu'en est-il de [packed repositories] (https://git-scm.com/docs/git-repack) (par exemple, après l'exécution de 'git repack -ad')? Dans un référentiel compact, les blobs peuvent ne pas exister en tant que fichiers autonomes. – Leon
Les fichiers dans .git/objets ne sont pas les données d'origine. Ils sont compressés et ont un petit en-tête. Vous ne gagnez rien en accédant directement aux fichiers. – j6t
@Leon @ j6t Donc, en d'autres termes, ce que je veux c'est juste un rêve et l'accès direct au répertoire '.git' est encore une mauvaise idée? Je pensais que les blobs restent toujours intacts ... –