Qual è il vantaggio del processo di commit a due fasi di git (staging)?

167

Sto imparando git e ho notato che ha un processo di commit in due fasi:

  1. git add <files>
  2. git commit

Il primo passaggio posiziona le revisioni in quella che viene chiamata "area di staging" o "indice".

Quello che mi interessa è il motivo per cui è stata presa questa decisione progettuale e quali sono i suoi vantaggi?

Inoltre, come utente git lo fai o usi solo git commit -a ?

Te lo chiedo mentre vengo da bzr (Bazaar) che non ha questa funzione.

    
posta thomasrutter 18.04.2011 - 10:46
fonte

4 risposte

79

Dividi il lavoro in commit separati. Probabilmente hai aperto molte volte un file per scrivere una correzione su una singola riga, ma allo stesso tempo hai notato che la formattazione era sbagliata, alcuni documenti potrebbero essere migliorato, o qualche altra correzione non correlata. Con altri RCS s dovresti scriverlo o salvarlo nella memoria, finire la correzione per cui sei venuto, lo impegni, e poi torni a riparare l'altra roba (o crei un commit di palla di fango con cose non correlate). Con Git puoi correggere tutto in una volta, e stage + commit la singola riga separatamente, con git add -i o git-gui .

Non rompere la build. stai lavorando su una modifica complicata. Quindi provi cose diverse, alcune delle quali funzionano meglio di altre, alcune che rompono le cose. Con Git puoi mettere in scena le cose quando la modifica ha reso le cose migliori e checkout (o modificarne altre) quando la modifica non ha funzionato. Non dovrai fare affidamento sulla funzionalità di annullamento dell'editor, puoi checkout dell'intero repository anziché solo file per file e qualsiasi errore a livello di file (come la rimozione di un file che non è stato eseguito o salvato + chiudere dopo una brutta modifica) non porta a molto lavoro perso.

    
risposta data 18.04.2011 - 11:38
fonte
63

Uno dei vantaggi per me è la possibilità di "aggiungere" i file progressivamente. Prima di impegnarmi, rivedo ogni file. Una volta esaminato il file, lo aggiungo. Quando I git status o git diff , git mostra solo i file che sono stati modificati e non sono stati ancora aggiunti. Quando ho rivisto tutti i file e li ho aggiunti, posso eseguire il commit.

Quindi sì, trovo l'area di staging molto utile.

E no, non uso mai git commit -a . Tuttavia, io uso spesso git add -u . In questo modo posso ancora visualizzare ciò che deve essere impegnato.

    
risposta data 18.04.2011 - 11:13
fonte
21

Il vantaggio è piuttosto semplice: ti dà il pieno controllo su quali file vuoi impegnare quando. In questo caso, puoi utilizzare git add -p per controllare quali linee vuoi impegnare.

    
risposta data 18.04.2011 - 18:14
fonte
1

Uno dei vantaggi che mi piace è la capacità di commettere una parte di un cambiamento. Cioè, usando git add -e. Non mi impegno tutte le volte che dovrei, e il comando git add -e mi consente di svelare le mie modifiche in un certo senso.

    
risposta data 19.04.2011 - 01:54
fonte

Leggi altre domande sui tag