la documentazione per Gerrit, in particolare la sezione "Push changes", spiega che si spinge alla "magica refs/for/'branch'
rif utilizzando qualsiasi strumento client Git".
L'immagine seguente è presa da the Intro to Gerrit. Quando si spinge a Gerrit, si fa git push gerrit HEAD:refs/for/<BRANCH>
. Ciò trasferisce le modifiche all'area di gestione (nel diagramma "Modifiche in sospeso"). Gerrit in realtà non ha un ramo chiamato <BRANCH>
; sta al cliente git.
Internamente, Gerrit ha una propria implementazione per gli stack Git e SSH. Questo gli permette di fornire i "magici" ref refs/for/<BRANCH>
.
Quando una richiesta push viene ricevuta per creare un riferimento in uno di questi spazi dei nomi, Gerrit esegue la propria logica per aggiornare il database e quindi giace sul client sul risultato dell'operazione. Un risultato di successo fa credere al cliente che Gerrit ha creato l'arbitro, ma in realtà Gerrit non ha creato l'arbitro. [Link - Gerrit, "Gritty Details"].
Dopo una patch di successo (vale a dire, la patch è stato spinto a Gerrit, [mettendolo in "Pending Changes" area di sosta], rivisto, e la revisione è stata superata), Gerrit spinge il passaggio dalle "Modifiche in sospeso" al "Repertorio autorevole", calcolando il ramo per inserirlo in base alla magia che ha fatto quando hai spinto a refs/for/<BRANCH>
. In questo modo, le patch riesaminate con successo possono essere estratte direttamente dai rami corretti di Authoritative Repository
.
Questa è una bellissima risposta. Grazie :) – Shrayas
Per curiosità, cosa succede veramente se fai qualcosa come "git push origin" solo? L'ho provato e non vedo la modifica da nessuna parte, quindi la domanda. Ma esiste nel mio registro locale, naturalmente. –
@Pintolaranja Ho fatto lo stesso per caso. Hai ragione, Gerrit "gestisce" tale situazione, ma non crea alcun cambiamento. Quindi, in realtà, non lo gestisce affatto. Il che mi fa davvero incazzare, perché è davvero stupido. Perché consentire all'utente di commettere qualcosa, che Gerrit non è in grado di gestire correttamente? – trejder