Utilisation du terminal OS X,Comment afficher les objets git et l'index sans utiliser git
Comment visualiser le contenu de ces fichiers en texte brut?
Utilisation du terminal OS X,Comment afficher les objets git et l'index sans utiliser git
Comment visualiser le contenu de ces fichiers en texte brut?
Regardez “Object storage format” in Git User Manual.
Il s'agit de données compressées brutes utilisant zlib. On peut utiliser zpipe
depuis le paquet 'zlib1g-dev'. Compilez the example avec gcc -o zpipe zpipe.c -lz
. Ce n'est pas une norme .gz
ou quelque chose.
./zpipe -d < .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133
imprime le contenu du blob (en-tête + données)
Si vous voulez vérifier le SHA-1, vous devez mettre le blob non compressé dans un fichier (myblob
) et faire
sha1sum myblob
Malheureusement, cela ne fonctionne pas pour les objets emballés (ceux qui ont été dans le référentiel pendant un certain temps). –
Voulez-vous dire que les fichiers objets contiennent uniquement la charge utile DEFLATE, et non les autres champs de métadonnées spécifiés dans: https://www.ietf.org/rfc/rfc1952.txt, c'est pourquoi 'gunzip' ne fonctionnera pas ? –
Si vous souhaitez afficher la forme en texte brut des objets git (validés et/ou blobs, c'est-à-dire le contenu du fichier) sans utiliser en utilisant git, ce ne serait pas facile, surtout si le référentiel est compressé. Vous ne pouvez pas installer git localement, dans votre répertoire personnel (ou son équivalent sur MacOS X)?
Le format pour lâche objets, stockés en tant que fichiers dans .git/objects/
répertoire fan-out, par ex. .git/objects/02/43019ddb4d94114e5a8580eec01baeea195133
(le répertoire de fan-out et l'identifiant SHA-1 de l'objet) est décrit par ex. en Chapter 9.2 "Git Objects" du livre "Pro Git" (disponible en ligne gratuitement) et Chapter 7.1 "How Git Stores Objects" de "Git Community Book".
Le format pack, où l'ensemble d'objets est stocké dans un fichier unique dans .git/objects/pack/
, par ex. .git/objects/pack/pack-1db7aa96d95149a4dd341490a3594181a24415ee.pack
, est décrit dans Documentation/technical/pack-format.txt et Chapter 7.5 "The Packfile" de « Git Community Book » (et mentionné dans Chapter 9.4 "Packfiles" de « Git Pro »)
Si vous voulez trouver le dernier COMMIT jeter un premier regard sur .git/HEAD
fichier à trouver branche actuelle. Il contiendrait quelque chose comme ce qui suit:
ref: refs/heads/master
(si elle contient SHA-1, vous pouvez le prendre comme id dernier commit, et sauter une étape). Puis vérifiez par ex. .git/refs/heads/master
pour trouver où pointe la branche. Il contiendrait SHA-1 d'un commit, par exemple:
dbc1b1f71052c084a84b5c395e1cb4b5ae526fcb
Le dernier commit (le plus récent) serait probablement en format lâche; dans cet exemple, il s'agirait du fichier .git/objects/db/c1b1f71052c084a84b5c395e1cb4b5ae526fcb
.
Je vais interpréter votre question d'une manière différente. Si vous voulez comprendre ce que sont les fichiers objets, vous pouvez utiliser git pour les voir directement, sans naviguer dans le journal de l'historique ou en utilisant git checkout, diff etc.Par exemple:
Pour le fichier .git/objects/04/a42e9a7282340ef0256eaa6d59254227b8b141
Exécutez la commande
git show 04a42e
qui combine la 04
de /04/
et les quatre premiers caractères du nombre restant a42e
.
> git show 04a42e
commit 04f7db976fa54c72fcc6350dd7d0aa06cb249df6
Author: Alex Brown <[email protected]>
Date: Fri Jan 8 11:02:21 2010 +0000
a text file
diff --git a/1.txt b/1.txt
new file mode 100644
index 0000000..04a42e9
--- /dev/null
+++ b/1.txt
@@ -0,0 +1,3 @@
+Woo
+# boo
+# choo
Celui-ci est une livraison, d'autres objets peuvent être fichiers blobs, arbres, etc.
Cela semble être une bonne réponse à * certaines * questions: P –
alias deflate="perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'"
deflate .git/objects/4b/3083256dedabd68e839d7717aa785424119990 | sha1sum
4b3083256dedabd68e839d7717aa785424119990 -
L'index est enregistré sous .git/index
.
Il s'agit d'un format binaire non compressé spécifié à l'adresse: https://github.com/git/git/blob/master/Documentation/technical/index-format.txt, la seule façon de le lire est donc d'utiliser un outil tel que hd
.
Le fichier index
contient une liste de fichiers avec leurs métadonnées, y compris les inodes, les autorisations et l'heure de modification. Il contient également le SHA-1 du contenu, qui est stocké en tant qu'objet, ce qui signifie que lorsque vous faites git add
il peut créer de nouveaux objets.
Je vous encourage à créer un rapport de test simple comme git init init && cd init && echo a > a && git add a
, puis hd .git/index
pour vérifier le format de champ par champ.
La question suivante se concentre davantage sur l'indice: What does the git index contain EXACTLY?
Ces fichiers sont intrinsèquement non-texte brut, et de les afficher en tant que tel, vous avez besoin d'un programme qui les convertit de leur format en texte. Git est un programme avec des composants conçus pour faire exactement cela. Je serais extrêmement surpris si quelqu'un en a écrit un autre. – Cascabel
Donc les objets (en particulier les objets commit) ne seront pas convertis en texte brut? –
Ils sont * au moins * compressés en utilisant la compression zlib (deflate). –