Cosa fa git rev-parse?


285

Cosa fa git rev-parse?

Ho letto la pagina man ma ha sollevato più domande che risposte. Cose come:

Scegli e massaggia i parametri

Massaggi ? Cosa significa?

Sto usando come risolutore (a SHA1) di specificatori di revisione, come

git rev-parse HEAD^

o

git rev-parse origin/master

È questo lo scopo del comando? In caso contrario, è anche corretto usarlo per raggiungere questo obiettivo?


3
Per quanto posso vedere nella pagina man, è un'utilità principalmente interna per analizzare i nomi di revisione / oggetto per altri comandi. Quello che stai facendo è praticamente lo scopo del rev-parsecomando. Puoi anche usarlo per normalizzare una riga di comando, in modo che il programma reale non debba comprendere la complicata sintassi del nome oggetto di Git (useresti git rev-parseper modificare, o "massaggiare", alcuni parametri nella riga di comando prima del viene chiamato il programma effettivo).


60
La pagina man per git rev-parseè ridicolmente incomprensibile. Sono sorpreso che nessuno si sia preso la briga di riscrivere quel gergo in qualcosa di leggibile dall'uomo, anche dopo 5 anni.
not2qubit

@ not2qubit Me: 'Grazie per il chiarimento, mi sentivo inferiore.' Linus Torvalds: "L'ho riletto, esattamente quale parte non hai capito?"
Brain2000,

Risposte:


245

git rev-parseè un plumbingcomando accessorio utilizzato principalmente per la manipolazione.

Un uso comune di git rev-parseè stampare gli hash SHA1 con un identificatore di revisione. Inoltre, ha varie opzioni per formattare questo output, ad esempio --shortper stampare un SHA1 unico più corto.

Ci sono anche altri casi d'uso (negli script e altri strumenti basati su git) che ho usato per:

  • --verify per verificare che l'oggetto specificato sia un oggetto git valido.
  • --git-dirper visualizzare il percorso abs / relativo della .gitdirectory.
  • Verifica se sei attualmente all'interno di un repository utilizzando --is-inside-git-diro all'interno di un albero di lavoro utilizzando--is-inside-work-tree
  • Verifica se il repository è un utilizzo nudo --is-bare-repository
  • La stampa di hash SHA1 di rami ( --branches), tag ( --tags) e ref può anche essere filtrata in base al telecomando (usando --remote)
  • --parse-optper normalizzare gli argomenti in uno script (in qualche modo simile a getopt) e stampare una stringa di output che può essere utilizzata coneval

Massageimplica solo che è possibile convertire le informazioni da un modulo in un altro, cioè un comando di trasformazione. Questi sono alcuni brevi esempi che mi vengono in mente:

  • un nome di ramo o tag nello SHA1 del commit a cui punta in modo che possa essere passato a un comando idraulico che accetta solo i valori SHA1 per il commit.
  • un intervallo di revisione A..Bper git logo git diffnegli argomenti equivalenti per il comando idraulico sottostante comeB ^A

102

Giusto per elaborare l'etimologia del nome del comando rev-parse, Git usa costantemente il termine revnei comandi idraulici come abbreviazione di "revisione" e in genere significa l'hash SHA1 di 40 caratteri per un commit. Ad rev-listesempio, il comando stampa un elenco di hash di commit da 40 caratteri per un ramo o altro.

In questo caso il nome potrebbe essere espanso in parse-a-commitish-to-a-full-SHA1-hash. Mentre il comando ha le varie funzioni ausiliarie menzionate nella risposta di Tuxdude, il suo omonimo sembra essere il caso d'uso di trasformare un riferimento intuitivo come un nome di ramo o un hash abbreviato nell'ambiguo hash SHA1 di 40 caratteri più utile per molte programmazioni / impianti idraulici scopi.

So che stavo pensando che fosse qualcosa di "reverse-parse" per un bel po 'di tempo prima che lo capissi e avessi lo stesso problema nel dare un senso ai termini "massaggiare" e "manipolazione" :)

Ad ogni modo, trovo che questa nozione di "analisi da una revisione" sia un modo soddisfacente per pensarci, e un concetto affidabile per ricordare questo comando quando ho bisogno di quel genere di cose. Spesso negli script Git si prende un riferimento di commit intuitivo come input dell'utente e generalmente si desidera che venga risolto in un riferimento di lavoro convalidato e non ambiguo non appena ricevuto. Altrimenti la traduzione e la convalida dell'input tendono a proliferare attraverso la sceneggiatura.


9
Grazie per la spiegazione, non ho capito un po 'i git-docs: git-scm.com/docs/git-rev-parse
Jacob McKay

puoi darci un esempio di messaginge manipulationcome alludi prima?
Bo Chen

5
In altre parole, git rev-parseè l'abbreviazione di git revision-parse. Prende l'input specificato e restituisce l'ID di revisione di 40 caratteri corrispondente.
Jonathan Benn,

36

git rev-parseFunziona anche per ottenere il nome del ramo corrente usando il flag --abbrev-ref come:

git rev-parse --abbrev-ref HEAD

È possibile ricevere un messaggio di commit in questo modo?
Leo Droidcoder,

2
@LeoDroidcoder trygit log --format=%B -n 1 <revision>
hipyhop
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.