Trovo che git sia difficile da capire 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.
Cosa significa “stage” nel contesto di git?
Commenti
Rispondi
Per organizzare un file è semplicemente prepararlo finemente per un commit. Git, con il suo indice, ti consente di eseguire il commit solo di alcune parti delle modifiche che hai fatto dallultimo commit. Supponiamo che tu stia lavorando su due funzionalità: una è terminata e laltra necessita ancora di un po di lavoro. Ti piacerebbe fare un commit e andare a casa (alle 5, finalmente!) Ma non ti piacerebbe impegnare le parti della seconda funzione, che non è ancora finita. Metti in scena le parti che sai appartenere alla prima funzione e commit. Ora il tuo commit è il tuo progetto con la prima funzione completata, mentre la seconda è ancora in fase di elaborazione nella tua directory di lavoro.
Commenti
- Buona spiegazione. Nota che git, essendo distribuito, ovviamente ti consente di eseguire entrambe le funzionalità, poiché i commit sono locali (allinizio). Tuttavia, potresti voler suddividere le modifiche in un commit per funzionalità, e di nuovo lo staging è utile.
- I don ‘ Per capire perché hai bisogno di staging per questo. Posso farlo con HG o anche SVN eseguendo il commit solo dei file rilevanti. Sembra che questa funzionalità sia progettata principalmente per aiutare le persone che insistono a lavorare con la riga di comando in cui ‘ è più difficile t o le caselle di controllo su ciò che stai impegnando.
- @jiggy git ti permette di mettere in scena parte di un file. È inoltre possibile mettere in fase un file, apportare ulteriori modifiche, quindi eseguire il commit dello stato in cui si trovava durante la gestione temporanea. Non puoi ‘ farlo in subversion.
- @jiggy In SVN, cè qualcosa, tra il momento in cui selezioni quali file / parti di file eseguire il commit e quando finisci di scrivere il tuo messaggio di commit, registra quali file / parti hai selezionato per il commit. Potrebbe non essere mai menzionato esplicitamente, potrebbe essere implementato nel client SVN piuttosto che in una parte effettiva del repository, potrebbero essere solo alcuni flag in memoria, ma questo è SVN ‘ s palcoscenico. 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 allutente di accedervi direttamente.
- La seconda freccia ” i file di stage ” nella figura potrebbero essere fuorvianti. ” stage hunks ” potrebbe essere più preciso?
Risposta
Dal momento che tutti finora hanno risposto in modo “formale”, permettetemi di farlo con alternative per migliorare lapprendimento con il potere delle metafore.
Quindi l area di staging è come:
- una cache di file di cui vuoi 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 deposito
- un luogo magico dove i file selezionati saranno trasformati in pietra con la tua magia e potranno essere magicamente trasportati al deposito a tuo piacimento
- la strada di mattoni gialli per i file per andare felicemente al deposito (o cadere se vuoi ripristinare)
- il luogo immaginario del porto marittimo dove i file vengono ricevuti un paio di scarpe di cemento e poi gettati nel mare del deposito
- al banco dei ricevimenti in biblioteca, metti lì i file affinché il bibliotecario li prepari per larchiviazione in biblioteca
- una scatola in cui metti le cose prima di infilarle sotto il tuo letto, dove il tuo letto è un deposito di scatole che hai precedentemente infilato
- nella baia di carico dei file prima che vadano nel magazzino del deposito con il caricatore di potenza
- il filtro di una caffettiera elettrica a goccia, se i file sono come la polvere di caffè, i file salvati sono il caffè preparato
- lufficio di Scrooge McDuck vicino al caveau, i file sono come le monete prima che finiscano nel caveau del suo enorme Money Bin
- il negozio di animali, una volta che porti a casa un animale domestico ti impegni
È magico !
Commenti
- Adoro le analogie ; way to go bud ^ _ ^
- Adoro lanalogia finale.
- Questa risposta è stata ” DISPERATAMENTE ” necessaria nello spazio dei tentativi comuni per spiegare la metafisica del git index = git staging. Francamente, ‘ vorrei anche sapere cosa stava pensando Linus quando ha deciso di volere unarea indice. Mi piace, ma voglio semplicemente apprezzare meglio perché ‘ è bello averlo e come usarlo nel modo più efficace.
Risposta
Lo staging è 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 nellarea di staging, git ti consente di modificarlo come preferisci (sostituisci i file staged con altre versioni di file di staging, rimuovere le modifiche dallo staging, ecc.).
Tempo di metafora interrotta:
Considera uno scenario in cui chiami i traslocatori per portare le tue cose dal tuo vecchio appartamento al tuo nuovo appartamento. Prima di farlo, esaminerete le vostre cose, deciderete cosa portare con voi e cosa buttare via, imballarlo in sacchetti e lasciarlo nel corridoio principale. I traslocatori semplicemente vengono, prendono le borse (già imballate) dal corridoio e le trasportano. In questo esempio, tutto fino a quando i traslocatori non ottengono la tua roba, è una messa in scena: decidi tu cosa va dove, come imballarlo e così via (ad esempio, potresti decidere che metà delle tue cose verranno gettate via prima ancora che i traslocatori arrivino lì – quello ” fa parte dello staging).
Da un punto di vista tecnico, lo staging supporta anche i commit transazionali, suddividendo tutte le operazioni in cosa può fallire (staging) e cosa non può fallire (commit):
Il commit in git viene implementato a livello transazionale, dopo che lo staging è riuscito. Diversi passaggi dello staging possono non riuscire (ad esempio, è necessario eseguire il commit, ma il tuo HDD è pieno al 99,9999% e git non ha spazio per eseguire un commit). Questo fallirà durante lo staging (il tuo repository non sarà danneggiato da un commit parziale) e il processo di staging non influenza la cronologia del commit (non corrompe il tuo repository in caso di errore).
Commenti
- … e così pochi voti finora.
Risposta
Mettere in scena un file significa 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 stage, modificarlo di nuovo e solo eseguire il commit o ripristinare la modifica originale.
controllo più preciso su esattamente come vuoi affrontare il controllo della versione.
Risposta
Per aggiungere alle altre eccellenti risposte, ecco da dove viene 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, “to stage” può significare
organizzare e partecipare a (un evento pubblico): sostenitori dellUDF ha organizzato una dimostrazione a Sofia
(da http://oxforddictionaries.com/definition/stage )
Il nome “staging” per la funzione git deriva da questo significato: quando si esegue lo staging, si prepara e si organizza un commit.Ovviamente un commit non è esattamente la stessa cosa di una performance, ma è un evento importante in un VCS :-).
Commenti
- I ‘ pensavo che corrispondesse maggiormente alluso nel post di staging
- Idem. Inoltre, ” un punto, punto o passaggio in un processo o sviluppo. ”
- Anche ‘ server di staging ‘ è un termine abbastanza comune utilizzato per descrivere un server che ‘ è tra lo sviluppo e produzione.
Risposta
La “fase” è un passaggio intermedio tecnicamente richiesto nel processo di registrazione di un file, ovvero raccogliere le 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 unopzione che git ti offre perché può, quindi perché no?
Per come la vedo io, la cosa principale che git “stage” ti dà che altri VCS non è che puoi usarlo per controllare un file. È effettivamente un commit locale senza nome e non commentato che ti offre un passaggio intermedio tra essere fatto con tutto il tuo lavoro e inviarlo permanentemente al repository e non avere nulla salvato nel tuo repository locale.
Ad esempio, supponiamo che tu abbia una funzione parzialmente terminata. È in uno stato stabile, supera tutti i test e potrebbe entrare in produzione, ma hai più lavoro da fare su di essa. Puoi mettere in scena tutte le tue modifiche e poi continuare a lavorare sulla funzionalità.
In seguito, avrai la possibilità di eseguire il commit di ciò che hai messo in scena (e inviare tale commit al repository remoto) o di aggiungere il tuo nuove modifiche alla tua area di staging e poi eseguirle tutte in una volta, oppure annullare solo le nuove modifiche e riportare la directory di lavoro allo stato in cui si trovava quando hai messo in scena le modifiche.
È completamente possibile per saltare praticamente lintera area di staging e utilizzare lopzione -a
per git commit
se non trovi che larea di staging sia un concetto utile. Molte persone saltano lo staging e anche gli strumenti GUI di solito lo consentono.
Commenti
- ” altro VCS don ‘ t ” – cosa te lo fa pensare? Sembra che gli scaffali di Perforce stiano facendo quello che descrivi, e anche con pochi campanelli e fischietti aggiuntivi
- @gnat sì, ovviamente molti altri VCS ti danno qualcosa come la messa in scena. Con ” altro VCS ” intendo altri VCS che non ‘ non hanno qualcosa come git ‘ s, poiché questo è ciò a cui si riferiva lOP.
- Ho trovato questa risposta immensamente migliore di tutte le precedenti, poiché ‘ è lunico che chiarisce perché esiste Staging (essendo tecnicamente richiesto ), una spiegazione della sua origine ( Git ‘ gli autori hanno scelto di rendere questo passaggio visibile e persistente ), aggiungendo quella che personalmente trovo essere una buona definizione per esso ( un commit locale intermedio, senza nome, non commentato ) . Tuttavia, penso che potrebbe essere migliorato citando una fonte per laffermazione sullorigine di Staging ed elaborare un po di più sul motivo per cui ‘ è tecnicamente necessario . @OldPro
- Se git fosse stato progettato da zero, questo avrebbe potuto essere solo parte di un ” branch ” concetto, locale e non visto da altri in questo caso. Allo stesso modo ” stash ” avrebbe potuto essere implementato (e compreso!) Come istanza specifica del concetto generalizzato di ” branch. ” Potresti quindi avere un numero qualsiasi di livelli di ” staging ” che preferisci.
Rispondi
Con la maggior parte degli altri sistemi di controllo della versione, ci sono 2 posti dove 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 impacchettare e memorizzare le modifiche). In Git cè una terza opzione: larea di staging (o indice). È fondamentalmente una piattaforma di caricamento in cui puoi determinare quali modifiche vengono spedite.
fonte: http://gitready.com/beginner/2009/01/18/the-staging-area.html
Commenti
- questo ‘ non sembra aggiungere nulla di sostanziale rispetto alle 6 risposte precedenti
- Cita Indice. E riferimenti a un articolo molto approfondito. Upvoting. A proposito, alcune risposte sopra sono solo barzellette.
Risposta
La mia comprensione è, supponiamo che io stia sviluppando una funzione di accesso e richieda 5 passaggi consecutivi per il completamento. Quindi qui la messa in scena ti aiuterà a lavorare su passaggi come
fatto con il passaggio 1.
finito con il passaggio 2, ora il passaggio 1 e il passaggio 2 sono entrambi lo stadio corretto.
sbagliare con il passaggio 3 no problema verifica ultimo passaggio graduale che è il passaggio 2 e allo stesso modo una volta terminati tutti e 5 i passaggi significa che la funzione è completa ora eseguire il commit.
Commenti
- questo ‘ non sembra aggiungere nulla di sostanziale rispetto ai punti fatti e spiegati in precedenza 9 risposte
- sì hai ragione, ho solo cercato di rendere la spiegazione semplice e dolce
- E come mi sento di usare questo concetto praticamente ho provato a spiegarlo
- considera di dare unocchiata alla discussione qui: Le seconde risposte TL; DR sono accettabili? (FWIW rispetto alle risposte precedenti questa non ‘ non mi sembra semplice né dolce)
- 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 puoi ‘ non spiegare nulla in modo semplice, allora tu non lho imparato correttamente o non ‘ so come usarlo. Quindi è brutto ora mettere un sommario o un modo semplice per rispondere ??
git add file.ext
per un file specifico ogit add .
per influenzare tutti i file modificati e non tracciati. I file aggiunti in questo modo sono detti ” staged ” e verranno inclusi nel prossimo ” commit “. Il commit è unistantanea del tuo lavoro creato ad es. congit commit -m "I wrote something"
.