Come ignorare determinati file in Git


731

Ho un repository con un file, Hello.java. Quando lo compilo, Hello.classviene generato un file aggiuntivo .

Ho creato una voce per Hello.classin un .gitignorefile. Tuttavia, il file sembra ancora essere monitorato.

Come posso far ignorare Git Hello.class?


8
Cosa intendi con "non funziona"? Hai forse già aggiunto Hello.class al tuo repository? gitignores non ha alcun effetto sui contenuti già tracciati. Vedi ad esempio stackoverflow.com/questions/1139762/gitignore-file-not-ignoring
Cascabel

Risposte:


810

Il problema è che .gitignoreignora solo i file che non sono stati tracciati prima (da git add). Esegui git reset name_of_fileper disinstallare il file e conservarlo. Nel caso in cui si desideri rimuovere anche il file specificato dal repository (dopo averlo premuto), utilizzare git rm --cached name_of_file.


190
Il comando git rm --cached name_of_filerimuoverà il file dal tuo repository git. Anche se lo aggiungi al tuo file .gitignore. Ciò non significa ignorare che si sta eliminando.
OrwellHindenberg,

4
Che sembra essere ciò che OP voleva in questo caso.
Ondrej Slinták

40
Sono contento che la tua soluzione abbia funzionato per @ Kohan95! Sebbene questa domanda debba essere rinominata in base alla risposta selezionata. I miei commenti sono solo un avvertimento per gli sviluppatori che potrebbero non sapere cosa fa il comando.
OrwellHindenberg,

91
git reset name_of_filerimuove il tracciamento e non elimina il file.
Cees Timmerman,

7
Ho provato git rm --cached <nome_di_file> Ha eliminato il file nel repository, ma poiché si trovava nel file .gitignore, la copia locale non è stata eliminata. Come ulteriore nota, per aggiungere una directory, è necessario inserirla con una barra "/". Stavo rimuovendo la directory di configurazione di Rubymine in un progetto ruby ​​che qualcuno aveva registrato, che era ".idea". Nel file ho messo ".idea /" e poi "git rm --cached -r .idea" per rimuovere la directory e tutto ciò che contiene (perché git solo i file delle versioni, non le directory).
Doug Noel

222

Come ignorare i nuovi file

A livello globale

Aggiungi il / i percorso / i ai tuoi file che vorresti ignorare nel tuo .gitignorefile (e commettili). Queste voci di file si applicheranno anche ad altri che controllano il repository.

localmente

Aggiungi il / i percorso / i ai tuoi file che desideri ignorare .git/info/exclude file. Queste voci di file si applicano solo alla copia di lavoro locale.

Come ignorare i file modificati (temporaneamente)

Per ignorare i file modificati in modo che vengano elencati come modificati, è possibile utilizzare il seguente comando git:

git update-index --assume-unchanged <file>

Per ripristinare quell'ignoranza usa il seguente comando:

git update-index --no-assume-unchanged <file>

Perfetto per impedire che un file contenente una chiave API corrente venga inserito in github!
Jim In Texas,

1
@Xman Perché hai detto che è temporaneamente? Ho fatto i passaggi che hai citato per localgit ignore e ho riavviato il mio sistema, mostra ancora che funziona direttamente pulito.
Vivek Vardhan,

1
Grazie per l'utile update-indextrucco, assolutamente perfetto per evitare di modificare un .gitignorefile, che viene quindi monitorato da Git!
Thomas P.

@mcbjam Non esiste un comando git ignore speciale. Modifica un file .gitignore situato nella posizione appropriata all'interno della copia di lavoro. Dovresti quindi aggiungere questo .gitignore e impegnarlo. Tutti coloro che clonano quel repository avranno questi file ignorati.
Xman Classical,

@Vivek Vardhan git update-index --assume-immutato è come una maschera temporanea sull'indice. Rimarrà in vigore fino allo spegnimento. Per rendere più chiaro il mio punto, l'indice inizialmente (cioè subito dopo git read-tree) "contiene" tutti i file dall'albero che erano appena stati letti. Quindi facendo in modo che Git "chiudesse un occhio" su una voce di indice non equivale a rimuoverla effettivamente.
Xman Classical,

150

Aggiungi la seguente riga a .gitignore:

/Hello.class

Ciò escluderà Hello.class da git. Se lo hai già eseguito il commit, esegui il comando seguente:

git rm Hello.class

Se vuoi escludere tutti i file di classe da git, aggiungi la seguente riga a .gitignore:

*.class

32
L'aggiunta Hello.classa .gitignoreignora qualsiasi file chiamato Hello.classin qualsiasi sottodirectory. Se si intende ignorare il file solo Hello.classnella stessa directory del .gitignorefile, utilizzare /Hello.classinvece una riga.
ndim,

Dove metti il .gitignorefile?
CodyBugstein,

6
@Imray puoi mettere .gitignoreovunque in un progetto git - se inizia un percorso /, sarà relativo alla posizione del .gitignorefile; in caso contrario farà riferimento in modo ricorsivo ai file nella directory corrente e nelle sue directory discendenti.
Armand,

109

1) Crea un .gitignorefile. Per fare ciò, basta creare un .txtfile e modificare l'estensione come segue:

Inserisci qui la descrizione dell'immagine

Quindi devi cambiare il nome, scrivendo la seguente riga in una finestra cmd:

 rename git.txt .gitignore

Dov'è git.txtil nome del file che hai appena creato.

Quindi è possibile aprire il file e scrivere tutti i file che non si desidera aggiungere nel repository. Ad esempio, il mio è simile al seguente:

#OS junk files
[Tt]humbs.db
*.DS_Store

#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad

#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*

#Project files
[Bb]uild/

#Subversion files
.svn

# Office Temp Files
~$*

Una volta ottenuto questo, è necessario aggiungerlo al repository Git. Devi salvare il file dove si trova il tuo repository.

Quindi in Git Bash devi scrivere la seguente riga:

git config --global core.excludesfile ~/.gitignore_global

Se il repository esiste già, allora devi fare quanto segue:

  1. git rm -r --cached .
  2. git add .
  3. git commit -m ".gitignore is now working"

Se il passaggio 2 non funziona, è necessario scrivere l'intero percorso dei file che si desidera aggiungere.


È possibile utilizzare il comando "copia con .gitignore" nel prompt e quindi premere CTRL + Z per creare direttamente il file senza Esplora risorse.
Heringer,

61

Ignorare:

git update-index --assume-unchanged <path/to/file>

Per annullare ignorare:

git update-index --no-assume-unchanged <path/to/file>

6
Vorrei che questo fosse in cima alla classifica come soluzione al problema .... È molto semplice ed elegante
user1457958

"È molto semplice ed elegante" - non proprio : "Supponiamo che invariato non debba essere abusato di un meccanismo ignorato. Si tratta di "conosco i miei operazioni filesystem sono lente. Io prometto Git che io non voglio cambiare questi percorsi ..." In particolare, è non è una promessa ... che Git sarà sempre in considerazione questi percorsi sono non modificato, se Git in grado di determinare un percorso ... è cambiato senza incorrere in lstat(2)costi aggiuntivi , si riserva il diritto di segnalare che il percorso è stato modificato (... git commit -aè libero di impegnare tale modifica). "
Chris,

47

È possibile utilizzare i metodi seguenti per ignorare / non ignorare le modifiche nei file monitorati.

  1. Per ignorare: git update-index --assume-unchanged <file>
  2. Per ripristinare i file ignorati: git update-index --no-assume-unchanged <file>

4
Questo vale per tutti i file? Non è chiaro come questi comandi possano essere applicati a un solo file per ignorarlo / non riconoscerlo.
javadba,

@kapil finalmente !! qualcosa che in realtà funziona tra un trilione di varianti del comando git! Ho provato ogni risposta per ignorare alcuni stupidi file build.xml che continuavano ad apparire dopo ogni build ... grazie!
killjoy

1
Si prega di non : 'Presumere invariato non dovrebbe essere abusato per un meccanismo ignora. Si tratta di "conosco i miei operazioni filesystem sono lente. Io prometto Git che io non voglio cambiare questi percorsi ..." In particolare, è non è una promessa ... che Git sarà sempre in considerazione questi percorsi sono non modificato, se Git in grado di determinare un percorso ... è cambiato senza incorrere in lstat(2)costi aggiuntivi , si riserva il diritto di segnalare che il percorso è stato modificato (... git commit -aè libero di impegnare tale modifica). "
Chris,

22

Crea un .gitignorenella directory dove .git è. È possibile elencare i file in esso separati da una nuova riga. Puoi anche usare i caratteri jolly:

*.o
.*.swp

3
È buona norma evitare di inserire nei .gitignorefile schemi specifici (ad es. File Vim temporanei) (a meno che tale strumento non sia obbligatorio dal progetto). Puoi inserire modelli per i tuoi strumenti preferiti nel tuo file escluso per utente (set core.excludesFile); lavoreranno su tutti i tuoi repository. Ad esempio git config --global core.excludesFile "$HOME/.git-user-excludes", quindi inseriscili in quel file.
Chris Johnsen,

@ Chris: Grazie per il suggerimento. Ma l'ho appena scritto lì perché non mi è venuto in mente niente di meglio :)
capolinea il

1
@ChrisJohnsen 'strumento specifico?' per vim ?? penso che sia sicuro escludere i file di scambio vim ..
javadba,

16

Dal sito ufficiale di GitHub:

Se hai già registrato un file e vuoi ignorarlo, Git non ignorerà il file se aggiungi una regola in seguito. In questi casi, è necessario prima annullare la traccia del file, eseguendo il comando seguente nel terminale:

git rm --cached FILENAME

o

git rm --cached .

12

Dovresti scrivere qualcosa del genere

*.class

nel tuo .gitignorefile.


4
@AgentZebra Dovresti aggiungere una voce *.classal tuo .gitignoreper fare in modo che git ignori tutti i file che finiscono .class.
KingCrunch

7

Aggiungi quali file vuoi ignorare .gitignore:

*.classe

* .Projects

* .prefs

*.progetto



5

Se hai già eseguito il commit del file e stai provando a ignorarlo aggiungendolo al .gitignorefile, Git non lo ignorerà. Per questo, devi prima fare le seguenti cose:

git rm --cached FILENAME

Se stai avviando il progetto di nuovo e vuoi aggiungere alcuni file a Git ignora, segui i passaggi seguenti per creare un file Git ignore:

  1. Passa al tuo repository Git.
  2. Immettere "touch .gitignore" che creerà un .gitignorefile.

3

Puoi anche usare .gitattributes (invece di .gitignore) per escludere interi tipi di file. Il file è piuttosto autoesplicativo, ma sto incollando i contenuti qui come riferimento. Prestare attenzione all'ultima riga (* .class binary):

# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.mo binary
*.pdf binary
*.phar binary
*.class binary

2

Aggiungi la seguente riga a .git / info / exclude:
Hello.class


Dovresti cambiare i file nella cartella .git?
Peter Mortensen,

Forse, non è una buona idea toccare questi file in .git manualmente.
mgyky il


2

Questa pagina Web può essere utile e fa risparmiare tempo quando si lavora con.gitignore .

Genera automaticamente file .gitignore per diversi IDE e sistemi operativi con i file / cartelle specifici che di solito non si desidera estrarre nel repository Git (ad esempio, cartelle e file di configurazione specifici dell'IDE).


1

Ho provato questo -

  1. elenca i file che vogliamo ignorare

git status .idea/xyz.xml .idea/pqr.iml Output .DS_Store

  1. Copia il contenuto del passaggio 1 e aggiungilo al file .gitignore.

echo " .idea/xyz.xml .idea/pqr.iml Output .DS_Store" >> .gitignore

  1. Convalidare

git status .gitignore

allo stesso modo possiamo aggiungere la directory e tutti i suoi sottodir / file che vogliamo ignorare nello stato git usando directoryname/*e ho eseguito questo comando dalla srcdirectory.


1
  1. Vai al file .gitignore e aggiungi la voce per i file che vuoi ignorare
  2. Correre git rm -r --cached .
  3. Adesso corri git add .

0

Ho provato il --assume-unchangede anche il .gitignorema nessuno dei due ha funzionato bene. Rendono difficile cambiare branca e difficile unire i cambiamenti dagli altri. Questa è la mia soluzione:

Quando eseguo il commit , rimuovo manualmente i file dall'elenco delle modifiche

Prima di estrarre , riposto i file modificati. E dopo aver tirato, faccio un pop stash .

  1. git stash
  2. git pull
  3. git stash pop

Il passaggio 3 a volte attiva un'unione e può causare conflitti che è necessario risolvere, il che è positivo.

Questo mi consente di mantenere le modifiche locali che non sono condivise con gli altri membri del team.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.