Gitignore non funziona


276

Il mio .gitignorefile non funziona per qualche motivo e nessuna quantità di Google è stata in grado di risolverlo. Ecco cosa ho:

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

È nella directory master, che è il mio repository git. Sto eseguendo Git 1.8.4.2 perché sono su un MacBook con OSX 10.8.6.


4
1. quali file sono indicizzati anche se non dovrebbero? 2. hai aggiunto .gitignore dopo aver aggiunto questi file al repository?
Ahmad,

2
@Ahmad In più progetti la /bin/cartella mostra ancora quando faccio a git status. Non ho cambiato quei file da quando ho aggiunto il.gitignore
user3280133

1
"da quando ho aggiunto .gitignore" - quindi hai aggiunto .gitignore dopo aver aggiunto i file?
Ahmad,

3
possibile duplicato di .gitignore non funzionante
Liam

Risposte:


688

I file / le cartelle nel controllo della versione non si elimineranno solo perché li hai aggiunti a .gitignore. Sono già nel repository e devi rimuoverli. Puoi farlo con questo:

( Ricorda di eseguire il commit di tutto ciò che hai modificato prima di farlo. )

git rm -rf --cached .
git add .

Questo rimuove tutti i file dal repository e li aggiunge nuovamente (questa volta rispettando le regole nel tuo .gitignore).


2
o potresti semplicemente provare a ripristinare i file / le cartelle che hai aggiunto a .gitignore usando git checkout folder_to_ignore / *
Zahra

1
@Greenish ma che non funzionerebbe se fossero già stati impegnati, funzionerebbe solo se fossero stati messi in scena, il che nel caso in cui la cartella fosse già nel .gitignore non dovrebbe accadere (a meno che non si forza forzatamente l'aggiunta) :)
Ahmad

1
non funziona per me quando invio le modifiche a github. Dice che tutto è aggiornato !!!!
Dr. Younes Henni,

1
Scusa Ahmed, ho risolto il problema eliminando il file gitignore e tirando e spingendo di nuovo nel repository remoto. Non ricordo più cosa diceva quando digito git status. Il mio problema è stato risolto. Molte grazie.
Dr. Younes Henni,

3
Penso che sia meglio aggiungere un comando 'git ignore' per semplificarlo. Quindi potremmo semplicemente usare git ignore path/filein qualsiasi momento.
Ti è stato il

123

Per annullare la traccia di un singolo file che è già stato aggiunto / inizializzato al repository, ad esempio, interrompere il tracciamento del file ma non eliminarlo dal sistema in uso: git rm --cached filename

Per annullare la traccia di ogni file che è ora nel tuo .gitignore:

Effettua innanzitutto il commit di eventuali modifiche al codice in sospeso, quindi esegui questo comando:

git rm -r --cached .

Questo rimuove tutti i file modificati dall'indice (area di gestione temporanea), quindi esegui:

git add .

Commettilo:

git commit -m ".gitignore is now working"

Assicurati di unire i tuoi rami al master o spostare il puntatore perché quando ho provato questo ho perso entrambi i rami delle mie funzionalità. Fortunatamente non ho perso alcun lavoro, tutti i miei aggiornamenti più recenti dal ramo di lavoro sono stati ripristinati al ramo principale, ma a seconda della configurazione questo comportamento potrebbe non essere auspicabile.
Slitta,

Come utilizzeresti questo comando per rimuovere una cartella dalla cache anziché un file?
RealMJDev

15

Dopo aver fatto un po 'di buca nel tentativo di seguire le risposte a questa domanda (forse perché dovevo farlo in un progetto di Visual Studio), ho scoperto che il percorso più semplice era

  1. Taglia e incolla i file che non voglio più tracciare in una posizione temporanea

  2. Commettere la "cancellazione" di quei file

  3. Commettere una modifica di .gitignoreper escludere i file che avevo temporaneamente spostato

  4. Sposta i file nella cartella.

Ho scoperto che questo è il modo più semplice di procedere (almeno in uno studio visivo, o ipotizzerei un altro ambiente basato su IDE come Android Studio), senza spararmi accidentalmente in un piede con un effetto piuttosto pervasivo git rm -rf --cached ., dopo di che il progetto di Visual Studio a cui stavo lavorando non è stato caricato.


2
Mi piace molto questo approccio - sembra meno distruttivo, anche se non è considerato "corretto".
theyetiman,

6

Nel mio caso era uno spazio vuoto all'inizio del file che si presentava chiaramente quando ho aperto il file in Blocco note, non era ovvio in Visual Studio Code.


4

Ho usato qualcosa per generare comune .gitignore per me e mi sono imbattuto in questo. Dopo aver letto la risposta di @Ozesh ho aperto in VS Code perché ha un bel indicatore in basso a destra che mostra il tipo di terminazioni di riga. Era LF, quindi mi sono convertito in CRLF come suggerito, ma senza dadi.

Quindi ho guardato accanto alle estremità della linea e ho notato che è stato salvato utilizzando UTF16. Quindi ho recuperato usando UTF8 codificando un voilà, ha funzionato. Non pensavo che il CRLF fosse importante, quindi l'ho cambiato di nuovo in LF per essere sicuro e funzionava ancora.

Naturalmente questo non era un problema di OP poiché aveva già eseguito il commit dei file, quindi erano già indicizzati, ma pensavo che avrei condiviso nel caso qualcun altro si imbattesse in questo.

TLDR ; Se non hai già eseguito il commit dei file e .gitignore non viene ancora rispettato, controlla la codifica dei file e, assicurati che sia UTF8 e, se non funziona, prova a fare confusione con i finali di linea.


1
UTF16 è stato il colpevole per me. Codice VS aperto> .gitignore aperto> ha aperto il prompt dei comandi> "Modifica codifica file"> "UTF-8"> Salva file
Michael

3

Nel mio caso gli spazi bianchi alla fine delle linee di .gitignore erano la causa. Quindi attenzione agli spazi bianchi nel .gitignore!


2

Ho risolto il mio problema nel modo seguente:

Prima di tutto, sono un utente di Windows, ma ho riscontrato un problema simile. Quindi, sto pubblicando la mia soluzione qui.

C'è un semplice motivo per cui a volte .gitignore non funziona come dovrebbe. È dovuto al comportamento di conversione EOL.

Ecco una soluzione rapida per questo

Modifica> Conversione EOL> Formato Windows> Salva

Puoi dare la colpa alle tue impostazioni dell'editor di testo .

Per esempio:

Dato che sono uno sviluppatore di Windows, in genere utilizzo Notepad ++ per modificare il mio testo a differenza degli utenti di Vim.

Quindi quello che succede è, quando apro il mio file .gitignore usando Notepad ++, sembra qualcosa del genere:

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

Se apro lo stesso file usando il Blocco note predefinito, questo è quello che ottengo

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

Quindi, potresti aver già indovinato guardando l'output. Tutto in .gitignore è diventato una riga, e poiché c'è un ## all'inizio, si comporta come se tutto fosse commentato.

Il modo per risolvere questo problema è semplice: basta aprire il file .gitignore con Notepad ++, quindi procedere come segue

Modifica> Conversione EOL> Formato Windows> Salva

Alla successiva apertura dello stesso file con il blocco note predefinito di Windows, tutto dovrebbe essere formattato correttamente. Provalo e vedi se questo funziona per te.


1

Inoltre, i commenti devono essere sulla propria riga. Non possono essere messi dopo una voce. Quindi questo non funzionerà:

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

Ma questo funzionerà:

# fine to comment here
/node_modules

0

Funziona git reset --hardper chiunque? Non sto dicendo che questa è una buona soluzione, sembrava funzionare la prima volta che ho provato.


Si prega di ignorare il mio commento sopra. Qualcuno al lavoro ha fatto qualcosa di così sbagliato in Git, ha causato cartelle duplicate e non ne ero a conoscenza per un bel po '. Grazie.
user1889992

0

Ho fatto il grande errore di modificare il mio dockerignore, ha funzionato benissimo dopo aver trovato il giusto file ignore: p


0

Aggiungendo la mia parte, questa è una domanda popolare.

Non sono riuscito a posizionare la directory .history all'interno di .gitignore perché non importa quale combinazione abbia provato, semplicemente non ha funzionato. Windows continua a generare nuovi file ad ogni salvataggio e non voglio vederli affatto.

inserisci qui la descrizione dell'immagine

Ma poi ho capito, questo è solo il mio ambiente di sviluppo personale sulla mia macchina. Cose come .history o .vscode sono specifiche per me, quindi sarebbe strano se tutti includessero le loro voci .gitignore in base all'IDE o al sistema operativo che stanno utilizzando.

Quindi questo ha funzionato per me, basta aggiungere ".history" a .git / info / exclude

echo ".history" >> .git/info/exclude
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.