Git - trouver un nom de fichier à partir d'un SHA1
J'ai ajouté un fichier à l'index avec:
git add somefile.txt
Je puis a obtenu le SHA1 pour ce fichier avec:
git hash-object somefile.txt
J'ai maintenant un SHA1 et je voudrais récupérer le nom de fichier de l'objet dans l'index de l'aide de l'SHA1.
git show 5a5bf28dcd7944991944cc5076c7525439830122
Cette commande renvoie le contenu du fichier, mais pas le nom du fichier.
Comment puis-je obtenir le nom complet et le chemin de retour de la SHA1?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de mappage direct dans git comme le nom du fichier est une partie de l'objet de l'arborescence qui contient le fichier, pas de l'objet blob qui est le contenu du fichier.
Ce n'est pas un fonctionnement habituel de vouloir récupérer un nom de fichier à partir d'un hash SHA1 donc, vous pourriez peut-être développer sur un monde réel de cas d'utilisation pour elle?
Si vous êtes à la recherche à des fichiers actuels (c'est à dire la TÊTE commettre), vous pouvez essayer ce qui suit.
Si vous voulez trouver le contenu dans les précédents s'engage vous aurez besoin de faire quelque chose de plus comme cela.
<commit-list>
,--all
recherche à travers toutes les filiales dans le référentiel.git ls-tree
accepte uniquement 1 révision comme argument (git v1.7.4.4). J'ai adapté la vôtre àfor rev in $(git rev-list --all); do git ls-tree -r $rev | grep $SHA; done | uniq
ls-tree
prend une révision simple argument, c'est pourquoi j'ai utilisé-n1
avecxargs
.-n
option. Semble être très utile. Merci pour l'astuce! Toutefois, la commande comme indiqué ci-dessus ne fonctionne pas pour moi. Ne sais pas pourquoi mais heureusement résolu mon problème en attendant.Grand one-liner pour ce faire:
git describe <sha1>
mieux maintenant?Le script suivant est fortement basé sur les Qui commit ce blob? et la réponse fournie par Aristote Pagaltzis.
Je suis sûr que quelqu'un pourrait embellir ce script mais il ne fonctionne pas.
L'idée est de regarder tous les arbres engagés et de recherche pour votre spécifique de hachage.
git rev-list <commit-list>
de ne pas inclure tous les commits qui ont par exemple supprimé parrebase -i
et sont maintenant référencés seulement par reflog, donc si blob n'est pas trouvé par la commande ci-dessus, vous devriez vérifier aussi reflog ie comme ceci:De valider le fichier et note le hash sha1 de la livraison de l'objet. Après que l'utilisation
et vous obtiendrez les noms de fichiers avec les tables de hachage.
Vérifier les pages de manuel pour plus d'options.