Il concetto di Working Copy in Git (detta anche working directory o working tree) è strettamente legato al fatto che un repository Git gestisce la sequenza di snapshot (commit) di determinati file contenuti in una directory.
Per capire cosa è e come funziona la working copy è, però, forse, più semplice farne un esempio:
Nel momento in cui viene clonato un repository esistente remoto, per esempio https://example.com/project.git, Git compie le sequenti azioni:
- crea una directory locale vuota project
- copia dentro questa directory tutti gli snapshot (commit) presenti sul repository remoto (in project/.git)
- individua l’ultimo snapshot (commit) della history
- estrae il contenuto di tutti i file corrispondente all’ultimo snapshot (commit)
La working copy in Git è, quindi, ciò che Git mette a disposizione dello sviluppatore web sul suo computer locale nel momento in cui gli si chiede (direttamente o indirettamente) di tirare fuori dalla history uno specifico commit.
Nel momento in cui apportiamo modifiche ai file estratti dallo snapshot (commit) o ne aggiungiamo/rimuoviamo/spostiamo/copiamo alcuni, Git può stabilire quali file sono cambiati nella working copy rispetto al commit da cui è stata estratta la working copy stessa. In particolare i file nella working copy possono trovarsi nei seguenti stati:
- Unmodified – il file locale e lo snapshot da cui è stato estratto hanno lo stesso contenuto
- Untracked – il file locale non è presente nello snapshot
- Modified – il file locale contiene modifiche rispetto alla snapshot da cui è stato estratto
Per completezza, nel glossario di Git si parla di “working tree” ed è definito come “The tree of actual checked out files.”