Cosa significa "stage" in git?


318

Trovo git difficile da capire in quanto non riuscivo 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.

Cosa significa "stage" nel contesto di git?



12
Git ha davvero un suo vocabolario. E poiché ogni istruzione è formulata nel vocabolario speciale, è difficile iniziare. "Stage" è fare git add file.extper un file specifico, o git add .influenzare tutti i file modificati e non tracciati. I file che sono stati aggiunti in questo modo si dice che siano "messi in scena" e saranno inclusi nel prossimo "commit". Il commit è un'istantanea del tuo lavoro creato ad es git commit -m "I wrote something". Con .
Jonatan Öström,

11
Git è difficile da capire perché non esiste un tutorial concettuale là fuori. Tutto passa attraverso dettagli inutili.
Xaqron,

2
Intendevi rimuovere il tag "terminologia" da questa domanda? Mi sembra un tag perfettamente valido.
Philip Kendall,

Per qualche ragione, il modo migliore per capire l'importanza della messa in scena è da questa risposta in Quora: qr.ae/TbSK2I
Lamar

Risposte:


310

Mettere in scena un file è semplicemente prepararlo con precisione per un commit. Git, con il suo indice ti consente di eseguire il commit di solo alcune parti delle modifiche apportate dall'ultimo commit. Supponiamo che tu stia lavorando su due funzionalità: una è terminata e una deve ancora essere eseguita. Ti piacerebbe fare un commit e tornare a casa (alle 5, finalmente!), Ma non ti piacerebbe impegnare le parti della seconda funzione, che non è ancora stata fatta. Metti in scena le parti che conosci appartengono alla prima funzione e ti impegni. Ora il tuo commit è il tuo progetto con la prima funzione completata, mentre la seconda è ancora in fase di elaborazione nella directory di lavoro.


5
Buona spiegazione Nota che git, essendo distribuito, ti consente ovviamente di eseguire il commit di entrambe le funzionalità, poiché i commit sono locali (all'inizio). Tuttavia, potresti voler dividere le modifiche in un commit per funzione, e di nuovo la stadiazione è utile.
sleske,

77
Non capisco perché hai bisogno della messa in scena per questo. Posso farlo con HG o anche SVN impegnando solo i file pertinenti. Sembra che questa funzione sia progettata principalmente per aiutare le persone che insistono a lavorare con la riga di comando dove è più difficile selezionare le caselle su ciò che si sta impegnando.
jiggy,

78
@jiggy git ti consente di mettere in scena parte di un file. È inoltre possibile mettere in scena un file, apportare ulteriori modifiche, quindi commettere lo stato in cui si trovava durante la gestione temporanea. Non puoi farlo in sovversione.
Izkata,

4
@jiggy In SVN c'è qualcosa, tra il momento in cui selezioni quali file / parti di file eseguire il commit e quando hai finito di scrivere il tuo messaggio di commit, che registra quali file / parti hai selezionato per eseguire il commit. Potrebbe non essere mai esplicitamente menzionato, potrebbe essere implementato nel client SVN piuttosto che una parte effettiva del repository, potrebbe essere solo qualche flag in memoria, ma questo è lo stadio di SVN. Non ho guardato HG, ma sospetto che faccia la stessa cosa. La differenza con git è che git riconosce che è una cosa, la registra su disco e consente all'utente di accedervi direttamente.
8bittree

7
La seconda freccia "file stage" nella figura potrebbe essere fuorviante. "stage hunks" potrebbero essere più precisi?
Ida,

137

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

Quindi l' area di stadiazione è come:

  • una cache di file che si desidera eseguire il commit
  • 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 verranno trasformati in pietra con la tua magia e potranno essere trasportati magicamente nel repository a tuo piacimento
  • la strada di mattoni gialli per i file per andare felicemente al repository (o cadere se si desidera ripristinare)
  • il luogo immaginario al porto marittimo dove vengono ricevuti i file un paio di scarpe di cemento e poi gettati nel mare del deposito
  • allo sportello dei ricevimenti in biblioteca, mettete lì i file per consentire al bibliotecario di prepararsi per l'archiviazione nella biblioteca
  • una scatola in cui metti le cose prima di metterle sotto il tuo letto, dove il tuo letto è un deposito di scatole in cui hai precedentemente inserito
  • il vano di caricamento dei file prima che entri nel magazzino del repository con il caricatore di potenza
  • il filtro di una caffettiera elettrica, se i file sono come la polvere del caffè, i file impegnati sono il caffè preparato
  • l'ufficio di Paperone accanto al caveau, i file sono come le monete prima che entrino nel caveau del suo enorme cestino
  • il negozio di animali, una volta portato a casa un animale domestico sei impegnato

È magico !


Adoro le analogie; modo di andare gemma ^ _ ^
Musa Al-hassy,

Adoro l'analogia finale.
meTchaikovsky

35

La gestione temporanea è un passaggio 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 gestione temporanea, git ti consente di modificarlo come preferisci (sostituisci i file di gestione temporanea con altre versioni di file di gestione temporanea, rimuovi le modifiche dalla stadiazione, ecc.).

Tempo di metafora rotto:

Prendi in considerazione uno scenario in cui chiami i motori per trasferire le tue cose dal tuo vecchio appartamento al tuo nuovo appartamento. Prima di farlo, esaminerai le tue cose, deciderai cosa portare con te e cosa butti via, imballalo in sacchetti e lo lasci nel corridoio principale. I traslochi vengono semplicemente, prendono le borse (già imballate) dal corridoio e le trasportano. In questo esempio, tutto fino a quando i traslochi non ottengono le tue cose, va in scena: decidi cosa va dove, come imballarle e così via (ad esempio puoi decidere che metà delle tue cose verrà buttata via prima ancora che i traslocatori arrivino lì - fa parte di messa in scena).

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

Il commit in git viene implementato in modo transazionale, dopo che la stadiazione ha avuto successo. Diversi passaggi della 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). Questo fallirà nella gestione temporanea (il repository non verrà danneggiato da un commit parziale) e il processo di gestione temporanea non influirà sulla cronologia del commit (non danneggerà il tuo repository in caso di errore).


... e così pochi voti finora.
ojonugwa ochalifu,

26

Mettere in scena un file è 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 ti consente un controllo più preciso su come affrontare il controllo della versione.


19

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

Ho controllato il dizionario per il significato di stage e nessuno dei significati era correlato ai concetti di controllo del codice sorgente.

In inglese "palcoscenico" può significare

organizzare e partecipare a (un evento pubblico): i sostenitori dell'UDF hanno organizzato una manifestazione a Sofia

(da http://oxforddictionaries.com/definition/stage )

Il nome "stadiazione" per la funzione git deriva da questo significato: durante la stadiazione, si sta preparando e organizzando un commit. Naturalmente un commit non è esattamente lo stesso di una performance, ma è un evento importante in un VCS :-).


3
Avrei pensato che corrispondesse più da vicino all'uso nella messa
Inutile

Idem. Inoltre, "un punto, punto o passaggio in un processo o sviluppo".
Darien,

Anche "server di gestione temporanea" è un termine abbastanza comune usato per descrivere un server tra sviluppo e produzione.
Eterno21,

4

Con la maggior parte degli altri sistemi di controllo della versione, ci sono 2 posti in cui archiviare i dati: la tua copia di lavoro (le cartelle / i file che stai attualmente utilizzando) e l'archivio dati (dove il controllo della versione decide come impacchettare e archiviare le modifiche). In Git c'è una terza opzione: l'area di gestione temporanea (o indice). Fondamentalmente è una piattaforma di carico in cui puoi determinare quali modifiche vengono spedite.

fonte: http://gitready.com/beginner/2009/01/18/the-staging-area.html


1
questo non sembra aggiungere nulla di sostanziale rispetto alle precedenti 6 risposte
moscerino

Menziona Index. E riferimenti a un articolo molto approfondito. Upvoting. A proposito, alcune risposte sopra sono solo scherzi.
Gangnus,

1

Lo "stage" è un passaggio intermedio tecnicamente richiesto nel processo di archiviazione di un file, vale a dire la raccolta delle modifiche da aggiungere al repository. Gli autori di Git hanno scelto di rendere questo passaggio visibile e persistente laddove altri VCS lo rendono una parte transitoria del processo di commit. Quindi è solo un'opzione che ti dà Git perché può, quindi perché no?

Per come la vedo io, la cosa principale che git "stage" ti dà che altri VCS non fanno è che puoi usarlo per controllare un file. È effettivamente un commit locale senza nome e senza commenti che ti offre un passaggio intermedio tra l'esecuzione di tutto il tuo lavoro e il commit permanente nel repository e la mancanza di alcun salvataggio nel tuo repository locale.

Ad esempio, supponiamo che tu abbia una funzione parzialmente finita. È in uno stato stabile, supera tutti i test e potrebbe andare in produzione, ma hai più lavoro da fare su di esso. È possibile mettere in scena tutte le modifiche e continuare a lavorare sulla funzione.

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

È possibile saltare praticamente completamente l'area di gestione temporanea e utilizzare l' -aopzione git commitse non si trova l'area di gestione temporanea un concetto utile. Molte persone saltano la messa in scena e anche gli strumenti della GUI lo consentono.


"altri VCS non lo fanno" - cosa ti fa pensare così? Scaffalature su Perforce sembra fare quello che descrivi, e anche con poche campane e fischietti aggiuntivi
moscerino

1
@gnat sì, certo che molti altri VCS ti danno qualcosa come la messa in scena. Per "altro VCS" intendo altri VCS che non hanno qualcosa di simile allo stadio di Git, poiché è a questo che si riferiva l'OP.
Old Pro

Ho trovato questa risposta immensamente migliore di tutto quanto sopra, poiché è l'unica che chiarisce perché esiste la stadiazione (essendo tecnicamente richiesta ), una spiegazione della sua origine ( gli autori di Git hanno scelto di rendere questo passaggio visibile e persistente ), aggiungendo quello che personalmente trovo sia una buona definizione per esso ( un commit locale intermedio, senza nome, non commentato ). Tuttavia, penso che potrebbe essere migliorato citando una fonte per l'affermazione sull'origine della stadiazione, ed elaborando un po 'di più sul perché è tecnicamente richiesto . @OldPro
alexlomba87

-1

La mia comprensione è, supponiamo che stia sviluppando la funzionalità di accesso e abbia richiesto 5 passaggi consecutivi per il completamento. Quindi, la messa in scena ti aiuterà a lavorare su passaggi come
fatto con il passaggio 1.
fatto con il passaggio 2, ora il passaggio 1 e il passaggio 2 sono entrambi corretti.
sbagliare con il passaggio 3 nessun problema checkout ultimo passaggio in scena che è il passaggio 2 allo
stesso modo una volta che hai fatto con tutti e 5 i passaggi che significa che la funzione è completa ora esegui il commit.


ciò non sembra aggiungere nulla di sostanziale rispetto ai punti formulati e spiegati nelle precedenti risposte 9
moscerino

sì, hai ragione, ho appena provato a rendere la spiegazione semplice e dolce
palash140,

E quello che mi sento di usare questo concetto praticamente ho cercato di spiegarlo
palash140

valuta la possibilità di dare un'occhiata alla discussione qui: sono accettabili le seconde risposte TL, DR? (FWIW rispetto alle risposte precedenti questo non mi sembra semplice né dolce)
moscerino

grazie signore, ho una domanda da porre. Ho trovato molte risposte e la maggior parte di esse sono troppo complesse sì, quelle sono corrette ma difficili da digerire in una volta, credo che se non riesci a spiegare nulla in modo semplice, allora non l'hai imparato correttamente o non sai come per usarlo. Quindi ora è male mettere un riassunto o un modo semplice per rispondere ??
palash140,
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.