Existe-t-il un moyen de lire tous les fichiers relatifs à un commit git sans exécuter git checkout? Un commit ne pointe-t-il pas vers un groupe d'objets blob dans le dossier .git? Existe-t-il un moyen de lire ces objets blob directement à partir d'un identifiant de validation? ou est-il simplement plus simple d'exécuter git checkout
? J'essaie juste de vérifier les fichiers pour des vulnérabilités telles que les mots de passe en texte brut, etc.
3 Réponses :
Il y a git unpack-file $ blob_id
, qui dépose une copie du contenu de l'objet blob à la racine de l'arbre de travail avec un nom indésirable, qu'il affiche.
Il y a aussi git cat -file --batch
, qui prend un format optionnel et quelques ajustements supplémentaires, et redirige toute la sortie demandée. Si vous avez le contrôle de la gestion des entrées de votre outil d'audit, ce sera de loin le plus efficace:
git ls-files -s | cut -d' ' -f2- \ | git cat-file --batch='%(objectname) %(objectsize) %(rest)' \ | your audit tool
et pour un commit, il commencerait git ls- arbre -r $ thatcommit | couper -d '' -f3-
Pour voir un objet (et l'obtenir sur stdout), vous pouvez faire:
git show some-branch-or-revision:file-path git cat-file -p object-id
L'un ou l'autre de ces éléments fonctionnerait.
... et pour voir une liste des fichiers contenus dans un commit, utilisez
git ls-tree -r <commit id>
Cette liste contiendra les identifiants blob des données du fichier, vous pouvez donc utiliser cat-file comme mentionné dans les autres réponses.