Che cosa significa "stage" in git?

273

Trovo difficile comprendere perché non sono riuscito a trovare il significato delle parole usate per le azioni. Ho controllato il dizionario per il significato di "stage" e nessuno dei significati era correlato ai concetti di controllo del codice sorgente.

Che cosa significa "stage" nel contesto di git?

    
posta 000 15.11.2011 - 04:27
fonte

8 risposte

267

Per stage un file è semplicemente per prepararlo finemente per un commit. Git, con il suo indice ti permette di commettere solo alcune parti delle modifiche che hai fatto dall'ultimo commit. Supponiamo che tu stia lavorando su due funzioni: una è terminata e c'è ancora bisogno di lavoro. Ti piacerebbe fare un commit e tornare a casa (alle 5, finalmente!) Ma non vorrebbe impegnare le parti della seconda funzione, che non è ancora stata eseguita. Metti in scena le parti che conosci appartengono alla prima funzione e commetti. Ora il tuo commit è il tuo progetto con la prima funzione fatta, mentre il secondo è ancora in work in progress nella tua directory di lavoro.

    
risposta data 15.11.2011 - 04:36
fonte
121

Dal momento che tutti finora hanno risposto in modo "formale", permettimi di farlo con alternative per migliorare l'apprendimento con il potere delle metafore.

Quindi area di staging è come:

  • una cache di file che vuoi salvare
  • non una serie di tubi ma in realtà un autocarro con cassone ribaltabile, pronto a spostare il lavoro con cui lo carichi, nel repository
  • un luogo magico in cui i file selezionati saranno trasformati in pietra con la tua magia e possono essere trasportati magicamente nel deposito a tuo piacimento
  • la strada in mattoni gialli per i file che vanno felicemente al deposito (o cadi se vuoi ripristinarli)
  • il luogo immaginario al porto di mare dove vengono ricevuti un paio di scarpe di cemento e poi gettato nel deposito mare
  • il banco delle ricezioni in biblioteca, metti i file lì per il bibliotecario per prepararti per l'archiviazione nella libreria
  • una scatola in cui mettere le cose prima di infilarla sotto il tuo letto, dove il tuo letto è un deposito di scatole che hai spinto in precedenza
  • l'area di caricamento dei file prima che entri nel magazzino dell'archivio con il caricatore di potenza
  • il filtro di una macchina da caffè a goccia elettrica, se i file sono come il caffè in polvere, allora i file commessi sono il caffè preparato
  • l'ufficio di Scrooge McDuck accanto al caveau, i file sono come le monete prima che entrino nel caveau del suo enorme bidone dei soldi
  • il negozio di animali, una volta portato a casa un animale domestico, ti impegni

È magico !

    
risposta data 15.11.2011 - 08:56
fonte
30

La gestione temporanea è un passo prima del processo di commit in git. Cioè, un commit in git viene eseguito in due passaggi: staging e commit effettivo.

Finché un changeset si trova nell'area di staging, git ti permette di modificarlo come preferisci (rimuovi i file di staging con altre versioni di file di staged, rimuovi le modifiche dalla gestione temporanea, ecc.).

Tempo di metafora interrotto:

Considera uno scenario in cui chiami i mover per portare le tue cose dal tuo vecchio appartamento al tuo nuovo appartamento. Prima di farlo, passerai attraverso le tue cose, deciderà cosa porterai con te e cosa butterai via, imballalo in sacchetti e lascialo nel corridoio principale. I commers vengono semplicemente, prendono i sacchetti (già imballati) dal corridoio e li trasportano. In questo esempio, ogni cosa fino a quando i commers ottengono le tue cose, è la scena: tu decidi cosa va dove, come metterlo in valigia e così via (ad esempio potresti decidere che metà della tua roba verrà buttata via prima che i mover arrivino anche lì - fa parte di allestimento).

Da un punto di vista tecnico, lo staging supporta anche i commit transazionali, dividendo tutte le operazioni in ciò che può fallire (staging) e cosa non può fallire (commit):

Il commit in git viene implementato a livello transazionale, dopo che la staging è riuscita. Diversi passaggi nella gestione temporanea possono non riuscire (ad esempio, è necessario eseguire il commit, ma l'HDD è pieno al 99,9999% e git non ha spazio per eseguire un commit). Ciò non riuscirà nella staging (il tuo repository non sarà danneggiato da un commit parziale) e il processo di staging non influirà sulla cronologia dei commit (non corrompe il tuo repository in caso di errore).

    
risposta data 07.07.2014 - 14:45
fonte
25

Per mettere in scena un file è necessario prepararlo per un commit. Poiché git espone questa azione al controllo degli utenti, consente di creare commit parziali, o di modificare un file, metterlo in scena, modificarlo di nuovo e solo eseguire il commit o ripristinare la modifica originale.

La gestione temporanea consente un controllo più preciso su in che modo desideri accedere al controllo della versione.

    
risposta data 15.11.2011 - 04:31
fonte
17

Per aggiungere altre risposte eccellenti, ecco da dove viene il nome di "stage":

I checked the dictionary for the meaning of stage and none of the meanings was related to source control concepts.

In inglese, "mettere in scena" può significare

organize and participate in (a public event): UDF supporters staged a demonstration in Sofia

(dal link )

Il nome "staging" per la funzione git deriva da questo significato: quando staging, stai preparando e organizzando un commit. Ovviamente un commit non è esattamente la stessa cosa di una performance, ma è un evento importante in un VCS: -).

    
risposta data 15.11.2011 - 10:15
fonte
4

Con la maggior parte degli altri sistemi di controllo delle versioni, ci sono 2 posizioni per memorizzare i dati: la tua copia di lavoro (le cartelle / i file che stai attualmente utilizzando) e il datastore (dove il controllo della versione decide come comprimere e memorizzare le modifiche). In Git c'è una terza opzione: l'area di staging (o indice). È fondamentalmente una piattaforma di caricamento in cui puoi determinare quali modifiche vengono spedite.

fonte: link

    
risposta data 11.07.2014 - 02:55
fonte
-1

Lo "stage" è una fase intermedia tecnicamente necessaria nel processo di verifica di un file, ovvero la raccolta delle modifiche da aggiungere al repository. Gli autori di Git hanno scelto di rendere questo passaggio visibile e persistente laddove altri VCS ne fanno una parte transitoria del processo di commit. Quindi è solo un'opzione che ti dà Git perché può così perché no?

Per come la vedo io, la cosa principale che lo "stage" git ti dà che altri VCS non è che puoi usarlo per il checkpoint di un file. È in effetti un commit locale senza nome e non commentato che ti offre un passaggio intermedio tra l'esecuzione di tutto il tuo lavoro e l'invio permanente al repository e il non aver salvato nulla nel tuo repository locale.

Ad esempio, supponiamo di avere una funzionalità parzialmente completata. È in uno stato stabile, supera tutti i test e potrebbe entrare in produzione, ma c'è ancora molto lavoro da fare. Puoi mettere in scena tutte le tue modifiche e poi continuare a lavorare sulla funzione.

In seguito, avrai la possibilità di eseguire il commit di ciò che hai messo in scena (e inviarlo al repository remoto) o di aggiungere le tue nuove modifiche alla tua area di staging e quindi di commetterlo tutto in una volta o di annullare solo la tua nuove modifiche e ripristina la directory di lavoro allo stato in cui si trovava quando hai messo in scena le tue modifiche.

È completamente possibile saltare del tutto l'area di staging e utilizzare l'opzione -a a git commit se non si trova l'area di staging un concetto utile. Un sacco di gente salta la messa in scena e gli strumenti GUI di solito lo consentono anche.

    
risposta data 29.04.2014 - 22:34
fonte
-2

La mia comprensione è, supponiamo che sto sviluppando funzionalità di accesso e richiesto 5 passaggi consecutivi da completare. Quindi qui la messa in scena ti aiuterà a lavorare su passi come
fatto con il passaggio 1 stage it.
fatto con il passaggio 2, ora il passaggio 1 e il passaggio 2 sono entrambi in fase corretta.
rovinarsi con il passaggio 3 nessun problema per il checkout dell'ultimo passo graduale che è il passaggio 2
allo stesso modo, una volta che hai completato tutti e 5 i passaggi, significa che la funzione è completa ora esegui il commit.

    
risposta data 25.08.2016 - 13:57
fonte

Leggi altre domande sui tag