Que fait git rev-parse?

Que fait git rev-parse?

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

Choisir et massage paramètres

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

J'utilise comme résolveur (à 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? Si non, est même correct de l'utiliser pour y parvenir?

186
git
demandé sur Greg Bacon 2013-04-04 01:53:47

3 réponses

git rev-parse est un accessoire plumbing commande principalement utilisé pour la manipulation.

Une utilisation courante de git rev-parse est d'imprimer les hachages SHA1 avec un spécificateur de révision. En outre, il dispose de diverses options pour formater cette sortie, telles que --short pour imprimer un sha1 unique plus court.

Il existe également d'autres cas d'utilisation (dans les scripts et autres outils construits au-dessus de git) pour lesquels j'ai utilisé:

  • --verify pour vérifier que l'objet spécifié est valide git objet.
  • --git-dir pour afficher le chemin abs / relatif du répertoire .git.
  • vérifier si vous êtes actuellement dans un référentiel en utilisant --is-inside-git-dir ou dans un arbre de travail en utilisant --is-inside-work-tree
  • vérifier si le repo est un nu en utilisant --is-bare-repository
  • L'impression des hachages SHA1 des branches (--branches), des tags (--tags) et des refs peut également être filtrée en fonction de la télécommande (en utilisant --remote)
  • --parse-opt pour normaliser les arguments dans un script (un peu similaire à getopt) et d'imprimer une sortie chaîne qui peut être utilisée avec eval

Massage signifie simplement qu'il est possible de convertir les données d'un formulaire dans 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..B pour git log ou git diff dans les arguments équivalents pour jacente commande B ^A
169
répondu Tuxdude 2015-09-03 06:29:49

Juste pour développer l'étymologie du nom de la commande rev-parse, Git utilise systématiquement le terme rev dans les commandes de plomberie comme abréviation de "révision" et signifiant généralement le hachage SHA1 de 40 caractères pour un commit. La commande rev-list par exemple 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. Alors que la commande a les plusieurs fonctions auxiliaires mentionnées dans la réponse de Tuxdude, son homonyme semble être le cas d'utilisation de transformer une référence conviviale comme un nom de branche ou un hachage Abrégé en un hachage SHA1 de 40 caractères non ambigu Le plus utile à de nombreuses fins de programmation / plomberie.

Je sais que je pensais que c'était quelque chose de "reverse-parse" pendant un certain temps 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 apporter cette commande à l'esprit quand j'ai besoin de ce genre de chose. Souvent, dans le script 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 non ambiguë dès que possible. Sinon, la traduction et la validation des entrées ont tendance à proliférer à travers le script.

56
répondu scanny 2015-01-31 07:34:35

git rev-parse fonctionne également pour obtenir le nom de la branche actuelle en utilisant le drapeau --abbev-ref comme:

git rev-parse --abbrev-ref HEAD
11
répondu mitra 2016-12-27 18:33:06