2015-05-14 31 views
19

Sto tentando di utilizzare il file .gitignore per escludere templates.js nella cartella public/app/. Il mio file .gitignore si presenta così:.gitignore esclude il file specifico

/vendor 
/node_modules 
composer.phar 
composer.lock 
.DS_Store 
templates.js 

Ma quando controllo nel Git Gui, il file templates.js è ancora mostrare in esso. Come posso escludere in modo specifico un file utilizzando .gitignore?

+2

Significa che il file è già stato aggiunto al repository in precedenza? '.gitignore' ignora solo il contenuto da aggiungere. –

+1

@CommuSoft Sì, è stato aggiunto al repository prima. Quindi, come posso escluderlo adesso? Il mio modo di fare in ".gitignore" è corretto? – user1995781

risposta

28

In contrasto con ciò che il nome "ignora" potrebbe suggerire. .gitignore viene consultato solo quando si file git add: in altre parole, un file già aggiunto al repository (dell'indice del) non verrà escluso in base allo .gitignore.

Per prima cosa è necessario modificare lo .gitignore in modo che il file non venga più aggiunto. Aggiungere la seguente riga al file .gitignore:

public/app/template.js 

successivo è necessario escludere il file dal repository. Probabilmente non si vuole rimuovere il file dal file system, questo può essere fatto con:

git rm --cached public/app/template.js 

La bandiera --cached garantisce il file non verrà rimosso dal file system. (Se non è importante, è possibile utilizzare git rm public/app/template.js, ma questo rimuoverà il file).

Sfondo

Il motivo .gitignore non viene utilizzato in modo proattivo è perché a volte potrebbe voler ignorare il .gitignore. Ad esempio, per esempio, non si desidera tenere traccia dei file *.log, è possibile specificare *.log nello .gitignore. Ma se ce n'è uno specifico da monitorare, puoi aggiungere git add -f some.log. Le forze flag -fgit aggiungono il file.

6

Dopo che un file è stato "aggiunto" al repository git una volta, continuerà a essere tracciato indipendentemente dal fatto che sia elencato nel file .gitignore.

Suppongo che tu abbia precedentemente aggiunto il file template.js, nel qual caso continuerà a tenere traccia delle modifiche, fino a quando non lo rimuovi dal repository. Una volta che il file è stato rimosso dal repository, verrà correttamente ignorato tramite il file .gitignore.

Il modo per rimuovere un file da un repository git (riga di comando) senza eliminarlo è

git rm --cached FILENAME 

Poi, una volta fatto questo e cercare di impegnarsi con il file nel gitignore, non lo farà fallo.

Nota che se aggiungi in modo specifico un file che hai nel tuo gitignore, l'aggiunta manuale del file sovrascriverà il gitignore.

5

Se si sta già rintracciando un file (git add su di esso e git commit), .gitignore non sarà di aiuto.

Credo che quello che vuoi è smettere di tracciare un file, e quindi usare .gitignore per escluderlo. Per interrompere il monitoraggio di un file, ma mantenere il file, utilizzare:

git rm --cached <file>

+0

non ha funzionato, ma penso che forse dovresti selezionare meglio le tue parole. * tenerlo nel repository * è un po 'in contrasto con * tenerlo sul tuo file system locale *. Un repository non * mappa * su un filesystem ... –

+0

@CommuSoft Risolto un po 'di soddisfazione, non ero troppo attento perché gli altri hanno risposto meglio. Grazie per il suggerimento. – Ross

4

In questo caso è possibile interrompere il monitoraggio templates.js con

git rm --cached public/app/templates.js 

Come altri hanno già spiegato, .gitignore ignora solo il contenuto da aggiungere. Ad esempio, se utilizzi frequentemente git add . e hai templates.js nel tuo .gitignore, git non lo aggiungerà.

Problemi correlati