Que fait git rev-parse?

285

Que fait git rev-parse-il?

J'ai lu la page de manuel mais elle a soulevé plus de questions que de réponses. Des choses comme:

Paramètres de sélection et de massage

Massage ? Qu'est-ce que ça veut dire?

J'utilise comme résolveur (vers SHA1) des spécificateurs de révision, comme

git rev-parse HEAD^

ou

git rev-parse origin/master

Est-ce le but de la commande? Sinon, est-il même correct de l'utiliser pour y parvenir?

talles
la source
3
Pour autant que je puisse voir dans la page de manuel, c'est un utilitaire principalement interne pour analyser les noms de révision / objet pour d'autres commandes. Ce que vous faites est à peu près le but de la rev-parsecommande. Vous pouvez également l'utiliser pour normaliser une ligne de commande, afin que le programme réel n'ait pas à comprendre la syntaxe compliquée du nom d'objet de Git (vous utiliseriez git rev-parsepour modifier ou "masser" certains paramètres de la ligne de commande avant le programme actuel est appelé).
60
La page de manuel de git rev-parseest ridiculement incompréhensible. Je suis surpris que personne n'ait pris la peine de réécrire ce jargon en quelque chose de lisible par l'homme, même après 5 ans.
not2qubit
@ not2qubit Me: 'Merci d'avoir clarifié, je me sentais inférieur.' Linus Torvalds: «Je l'ai relu, quelle partie exactement n'avez-vous pas comprise?
Brain2000

Réponses:

245

git rev-parseest une plumbingcommande auxiliaire principalement utilisée pour la manipulation.

Une utilisation courante de git rev-parseest d'imprimer les hachages SHA1 avec un spécificateur de révision. De plus, il a diverses options pour formater cette sortie, comme --shortpour imprimer un SHA1 unique plus court.

Il y a aussi d'autres cas d'utilisation (dans les scripts et autres outils construits sur git) que j'ai utilisés pour:

  • --verify pour vérifier que l'objet spécifié est un objet git valide.
  • --git-dirpour afficher le chemin abs / relatif du .gitrépertoire.
  • Vérifier si vous êtes actuellement dans un référentiel utilisant --is-inside-git-dirou dans un arbre de travail utilisant--is-inside-work-tree
  • Vérifier si le dépôt est une utilisation nue --is-bare-repository
  • L'impression de hachages SHA1 de branches ( --branches), de balises ( --tags) et les références peuvent également être filtrées en fonction de la télécommande (à l'aide --remote)
  • --parse-optpour normaliser les arguments dans un script (un peu similaire à getopt) et imprimer une chaîne de sortie qui peut être utilisée aveceval

Massageimplique simplement qu'il est possible de convertir les informations d'un formulaire en un autre, c'est-à-dire une commande de transformation. Voici quelques exemples rapides auxquels je peux penser:

  • un nom de branche ou de balise dans le SHA1 du commit vers lequel il pointe afin qu'il puisse être passé à une commande de plomberie qui n'accepte que les valeurs SHA1 pour le commit.
  • une plage de révision A..Bpour git logou git diffdans les arguments équivalents pour la commande de plomberie sous-jacente commeB ^A
Tuxdude
la source
102

Juste pour développer l'étymologie du nom de la commande rev-parse, Git utilise systématiquement le terme revdans les commandes de plomberie comme abréviation de "révision" et signifie généralement le hachage SHA1 à 40 caractères pour une validation. Par rev-listexemple, la commande imprime une liste de hachages de validation de 40 caractères pour une branche ou autre.

Dans ce cas, le nom peut être étendu à parse-a-commitish-to-a-full-SHA1-hash. Bien que la commande possède les nombreuses fonctions auxiliaires mentionnées dans la réponse de Tuxdude, son homonyme semble être le cas d'utilisation de la transformation d'une référence conviviale comme un nom de branche ou un hachage abrégé en le hachage SHA1 à 40 caractères sans ambiguïté le plus utile pour de nombreux programmes / plomberie fins.

Je sais que je pensais que c'était quelque chose de "reverse-parse" pendant un bon moment avant de le comprendre et j'ai eu le même problème à donner un sens aux termes "massage" et "manipulation" :)

Quoi qu'il en soit, je trouve cette notion de "parse-to-a-revision" une façon satisfaisante d'y penser, et un concept fiable pour me rappeler cette commande lorsque j'ai besoin de ce genre de chose. Souvent, dans les scripts Git, vous prenez une référence de validation conviviale comme entrée utilisateur et souhaitez généralement la résoudre en une référence de travail validée et sans ambiguïté dès que possible après l'avoir reçue. Sinon, la traduction et la validation des entrées ont tendance à proliférer dans le script.

scanny
la source
9
Merci pour l'explication, je n'ai pas du tout compris les git-docs: git-scm.com/docs/git-rev-parse
Jacob McKay
pouvez-vous nous donner un exemple de messaginget manipulationcomme vous y faites allusion auparavant?
Bo Chen
5
En d'autres termes, git rev-parseest l'abréviation de git revision-parse. Il prend l'entrée donnée et renvoie l'ID de révision de 40 caractères correspondant.
Jonathan Benn
36

git rev-parseFonctionne également pour obtenir le nom de la branche actuelle en utilisant le drapeau --abbrev-ref comme:

git rev-parse --abbrev-ref HEAD
mitra
la source
Est-il possible d'obtenir un message de validation de cette manière?
Leo Droidcoder
2
@LeoDroidcoder trygit log --format=%B -n 1 <revision>
hipyhop