2013-04-03 12 views
150

Cosa fa git rev-parse?Cosa fa git rev-parse?

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

individuare e massaggi parametri

Massaggi? Cosa significa?

sto usando come resolver (a SHA1) di identificatori di revisione, come

git rev-parse HEAD^ 

o

git rev-parse origin/master 

È questo lo scopo del comando? Se no, è anche corretto usarlo per raggiungere questo obiettivo?

+1

Per quanto posso vedere nella pagina man, è un programma di utilità per lo più interna per analizzare i nomi di revisione/oggetti per altri comandi . Quello che stai facendo è praticamente lo scopo del comando 'rev-parse'. Puoi anche usarlo per normalizzare una riga di comando, in modo che il programma reale non debba comprendere la sintassi del nome di un oggetto complicato di Git (dovresti usare 'git rev-parse' per cambiare, o" massaggio ", alcuni parametri nella riga di comando prima che venga chiamato il programma effettivo). –

+0

Vedere anche https://github.com/git/git/commit/b2a2c4d8099c69ec997e51cac489c0947ad17956 – VonC

risposta

139

git rev-parse è un comando ausiliario plumbing utilizzato principalmente per la manipolazione.

Un utilizzo comune di git rev-parse consiste nel stampare gli hash SHA1 con un identificatore di revisione. Inoltre, ha varie opzioni per formattare questa uscita, ad esempio --short, per stampare un SHA1 univoco più corto.

Non ci sono altri casi d'uso, nonché (in script e altri strumenti costruiti in cima a git) che ho usato per:

  • --verify per verificare che l'oggetto specificato è un oggetto git valido.
  • --git-dir per visualizzare il percorso abs/relativo della directory .git.
  • Verificando sei attualmente all'interno di un repository utilizzando --is-inside-git-dir o all'interno di un lavoro dell'albero utilizzando --is-inside-work-tree
  • Verificando la repo è un nudo utilizzando
  • stampa SHA1 hash dei rami (--branches), tag (--tags) e gli arbitri possono anche essere filtrati in base alla distanza (utilizzando --remote)
  • --parse-opt per normalizzare argomenti in uno script (sorta di simile a getopt) e stampare una stringa di output che può essere utilizzato con eval

Massage implica semplicemente che è possibile convertire le informazioni da un modulo in un altro, ad esempio un comando di trasformazione. Questi sono alcuni esempi veloci mi viene in mente:

  • un ramo o il nome tag nel SHA1 del commetterlo sta puntando in modo che possa essere passato a un comando idraulico, che accetta solo i valori SHA1 per il commit.
  • una gamma di revisione A..B per git log o git diff nelle argomentazioni equivalenti per il comando idraulico sottostante come B ^A
44

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

In questo caso il nome potrebbe essere esteso a 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 user-friendly come un nome di ramo o hash abbreviato nell'hash SHA1 di 40 caratteri non ambiguo più utile per molti programmi/impianti idraulici scopi.

So che stavo pensando che fosse "reverse-parse" qualcosa per un bel po 'prima ho capito e aveva la stessa difficoltà a fare il senso dei termini "massaggiare" e "manipolazione" :)

Comunque Trovo che questa nozione "parse-to-a-revision" sia un modo soddisfacente per pensarci, e un concetto affidabile per richiamare alla mente questo comando quando ho bisogno di questo genere di cose. Spesso nello scripting Git si prende un riferimento di commit user-friendly come input dell'utente e in genere si desidera risolverlo su un riferimento di lavoro validato e non ambiguo non appena possibile. In caso contrario, la traduzione e la convalida dell'input tendono a proliferare attraverso lo script.

+4

Grazie per la spiegazione, non ho capito un po 'il git-docs: http://git-scm.com/docs/git- rev-parse –

10

git rev-parse funziona anche per ottenere il nome del ramo corrente utilizzando il --abbrev-ref bandiera come:

git rev-parse --abbrev-ref HEAD