2010-08-18 10 views
25

Sono la stessa cosa? Se è così, perché ci sono così tanti termini ?!Qual è la differenza tra l'indice, memorizzato nella cache e messo in scena in git?

Inoltre, so che esiste questa cosa chiamata git stash, che è un posto in cui è possibile memorizzare temporaneamente le modifiche alla copia di lavoro senza doverle inviare al repository. Trovo che questo strumento sia davvero utile, ma, di nuovo, il nome è molto simile a un mucchio di altri concetti in git -> questo è molto confuso !!

+0

Non dimenticare "aggiunto", come Android Studio utilizza nell'interfaccia utente di controllo versione Git. –

+0

@ScottBiggs Cosa c'è "aggiunto"? – allyourcode

+0

Sono ancora un novizio sconcertato con Git. "Aggiungi" cosa fa prima di un "commit", che sono anche confuso con "Stash" (per aggiungere un altro termine alla zuppa). –

risposta

28

L'indice/stage/cache sono la stessa cosa - per quanto riguarda il motivo per cui così tanti termini, penso che l'indice fosse il termine "originale", ma la gente lo trovava confuso, quindi sono stati introdotti gli altri termini. E sono d'accordo sul fatto che a volte le cose siano un po 'confuse all'inizio.

La funzione stash di git è un modo per archiviare il lavoro "in corso" che non si desidera eseguire in questo momento in un oggetto di commit che viene archiviato in una particolare directory/database di memorizzazione. Il comando di base stash memorizzerà le modifiche non salvate apportate alla directory di lavoro (entrambe le modifiche memorizzate nella cache/staged e uncached/nonstage) e quindi ripristineranno la directory di lavoro su HEAD.

Non è realmente correlato all'indice/stage/cache eccetto per il fatto che memorizzerà le modifiche non salvate presenti nella cache.

Ciò consente di salvare rapidamente lo stato di una directory di lavoro sporca e di un indice in modo da poter eseguire lavori diversi in un ambiente pulito. Successivamente è possibile recuperare le informazioni nell'oggetto stash e applicarle alla propria directory di lavoro (anche se la stessa directory di lavoro si trova in uno stato diverso).

La pagina di manuale ufficiale git stash ha dettagli abbastanza buoni, pur rimanendo comprensibile. Ha anche dei buoni esempi di come si può usare stash.

+3

git stash è diverso dagli altri: è più simile a un 'commit anonimo' –

+0

@Peter - Ho provato ad indirizzare il bit di stash in modo più corretto (l'ho erroneamente letto inizialmente come qualcosa sullo "stage"). –

+0

@Michael Grazie! Un punto che spero chiarirai: la fine del paragrafo 2 dice che la memoria immagazzina i cambiamenti nella "cache", ma fare lo stash di git sembra includere anche cambiamenti non programmati. Questa è solo un'altra confusione sulla terminologia, o intendevi davvero che git stash memorizza solo modifiche graduali ?? – allyourcode

1

Davvero molto confuso. I 3 termini sono usati in modo intercambiabile. Ecco la mia opinione sul perché si chiama ciascuna di quelle cose. L'indice git è:

  • un file binario .git/index che è un indice di tutti i file monitorati
  • usate come un messa in scena zona per impegna
  • contiene memorizzati nella cache SHA1 hash per i file (velocizza le prestazioni)

Una nota importante è che l'indice/cache/stage contiene un elenco di TUTTI i file in sourc Controllo, anche quelli non modificati. Sfortunatamente frasi come "aggiungi un file all'indice" o "il file è messo in scena nell'indice" possono implicare in modo fuorviante che l'indice contiene solo file modificati.

Ecco una demo che mostra che l'indice git contiene l'elenco di tutti i file, non solo i file modificati:

# setup 
git init 

echo 'x' > committed.txt 
git add committed.txt 
git commit -m 'initial' 

echo 'y' > staged.txt 
git add staged.txt 

echo 'z' > working.txt 

# list HEAD 
git ls-tree --name-only -r HEAD 
# committed.txt 

# list index 
git ls-files 
# committed.txt 
# staged.txt 

# raw content of .git/index 
strings .git/index 
# DIRC 
# committed.txt 
# staged.txt 
# TREE 

# list working dir 
ls -1 
# committed.txt 
# staged.txt 
# working.txt 

Letture addizionali:

https://www.kernel.org/pub/software/scm/git/docs/technical/racy-git.txt

What does the git index contain EXACTLY?

+0

Grande! Penso che tu intenda ls -l not ls -1 – user5389726598465

Problemi correlati