2012-03-12 9 views

risposta

9

Un file viene tracciato se è sotto controllo di versione.

Come un piccolo esempio, un progetto C++ avrebbe

Makefile 
main.cpp 
interface.hpp 
worker.cpp 

come file di origine; metti questi sotto controllo di versione. Durante la compilazione,

main.o 
worker.o 
myapp 

vengono generati; questi non appartengono al controllo della versione, quindi non utilizzare git add su di essi. Rimangono untracked, perché a git non importa cosa succede loro. Fino a quando non li aggiungi a .gitignore (i file .o vengono ignorati per impostazione predefinita), git non sa se desideri aggiungerli o ignorarli, quindi li visualizza con il comando git status finché non prendi una decisione.

Se un file è tracciato o meno dipende anche dalla versione - si supponga di generare automaticamente worker.cpp e di rimuoverlo dal controllo di versione in una versione successiva. Il file è ora non tracciato in quella versione. Quando torni a una versione in cui il file era ancora sotto controllo di versione, git rifiuterà di sovrascrivere quel file durante il checkout.

2

Il Git Pro book chapter si parla cerca di dettaglio la nozione di file di non monitorate:

Quando si verifica un determinato SHA1, si ottiene una "istantanea" di tutti i file di versione.
Qualsiasi file non referenziato da questa istantanea non è tracciato. Non fa parte della struttura di Git:
Vedere "git - how to tell if a file is git tracked (by shell exit code)?"

Qualsiasi file che si desidera ignorare devono essere monitorate (come spiegato in questo GitHub help page).

Nota che git non ignorerà un file che era già stato rintracciato prima di aggiungere una regola a questo file per ignorarlo.
In tal caso, il file deve essere un-cingolati, di solito con git rm --cached filename

enter image description here

4

file cingolati sono quella gestita (versione controllata) da Git, che un tempo erano aggiunti e impegnati. I file non tracciati sono per lo più file che non si desidera controllare, perché ad esempio sono generati dal compilatore.

Aggiungi file non tracciati al file .gitignore, in modo che Git non ti chieda se desideri rintracciarli.

+2

È del tutto errato dire che un "file tracciato" è uno che è stato aggiunto una volta E COMMESSO. Un file tracciato è semplicemente un file che esiste nell'albero dell'indice - come è potuto arrivare a causa di un checkout di un ramo o a causa di un add o a causa di un comando diretto di Git plumbing. – Jazimov

0

Da un punto di vista puramente tecnico: un file tracciato è semplicemente un file che esiste nell'indice Git. Dire che è un file "sotto controllo di versione" è fuorviante, perché questo suggerisce che si tratta di un file che è entrato nel repository e che non è necessario per il tracciamento di un file.

Quando si avvia un nuovo repository Git, l'indice è vuoto e tutti i file nella directory di lavoro sono non tracciati. Un file viene tracciato quando viene aggiunto all'indice - a quel punto viene creato un hash SHA-1 e una voce dell'oggetto viene inserita nella cartella .Git \ Objects. Da quel momento in poi, Git è in grado di confrontare il contenuto/nome dello stesso file nella directory di lavoro per tracciare le modifiche, rinominare ed eliminare. Finché il file esiste nell'indice, viene tracciato.

Problemi correlati