gitignore non ignora la cartella


135

Nella radice del mio progetto ho una foocartella. All'interno della foocartella ho una barcartella. Vorrei ignorare tutte le modifiche a tutti i file all'interno della mia barcartella. Ho questo nel mio gitignore:

/foo/bar

La cartella è selezionata: esiste e contiene i file da ignorare. gitignoreè committed. Tuttavia, ho un file in cui eseguo un moification ed è nella mia barcartella. Quando scrivo

git status

all'interno del mio git bashvedo il file che avrebbe dovuto essere ignorato. Quale potrebbe essere il motivo e come posso ignorare con successo tutti i file all'interno della mia cartella della barra?

Si noti che i file sono stati precedentemente ignorati con la stessa riga, ma ho dovuto rimuovere temporaneamente quella riga su commitqualcosa sul server. Dopo il commit, ho rimesso la linea nel gitignore. Questo era un po 'di tempo fa, ma ora ho osservato che i file saranno presenti git status. Mi aspetterei di poter modificare i file ignorati senza che compaiano nel file git status.


In futuro, non è necessario modificare gli ignori per aggiungere qualcosa di ignorato. git add -f ignored-fileaggiungerà un file anche se è ignorato.
Chris,

Cosa git status foo/bar/file-that-should-be-ignoreddà?
Chris,

Il file che dovrebbe essere ignorato in caso di modifiche. Ovviamente mi manca qualcosa, ma secondo le mie conoscenze l'elenco dello stato git dovrebbe essere vuoto in quel caso, a condizione che / foo / bar sia presente in .gitignore
Lajos Arpad,

4
Sembra che quel file sia effettivamente seguito da Git. Ad un certo punto deve essere stato aggiunto al repository. Puoi vedere la sua storia con git log foo/bar/file-that-should-be-ignored. Se non dovrebbe far parte del repository, è necessario rimuoverlo git rm --cached foo/bar/file-that-should-be-ignorede quindi eseguire il commit come suggerito da Reck di seguito (anche se lo farei solo sul file, non sull'intera cartella). Questo (a) rimuoverà il file da Git, (b) manterrà il file nella tua copia locale e (c) causerà la cancellazione del file quando altri fetcho pullil nuovo commit.
Chris,

Risposte:


341

Immagino che questa cartella sia stata archiviata in git prima?

Esegui git rm -r --cached <folder>e ricontrolla.


3
Ciò rimuoverà completamente la cartella dal repository (versione corrente del). OP desidera che la cartella sia presente, ma non è necessario tenere traccia delle nuove modifiche
Gareth,

Purtroppo devo rimuovere l'accetto. Questa soluzione ha rimosso le versioni remote dei file quando è stato premuto. Voglio impostare gitignore per ignorare tutti i file di una cartella, non per rimuoverlo dal telecomando. È possibile? Ho ripristinato la soluzione.
Lajos Arpad,

12
git update-index --assume-unchanged <folder>Forse?
Reck

3
@Lajos non avresti dovuto solo correggere il suo bug invece di aggiungere lì questo confuso commento "modifica"?
Cregox,

2
@Cawas, poiché questo sito riguarda la condivisione delle conoscenze, la risposta è: no. È fuorviante accettare una risposta che contenga un bug. Quello -r non è facoltativo.
Lajos Arpad,

46

Per me, la risposta accettata faceva parte della soluzione, non dell'intera soluzione. Forse, gli altri passaggi che sto per pubblicare erano ovvi, ma prima li ho persi. Ecco i passaggi che ho preso per garantire che il mio .gitignorefile ignorasse la cartella che volevo ignorare:

  1. Commettere tutte le modifiche che è necessario correggere / modificare.
  2. Esegui questo comando: git rm -r --cached .(che rimuove tutto dall'indice git per aggiornare il tuo repository git)
  3. Quindi eseguire questo comando: git add .(per aggiungere nuovamente tutto al repository)
  4. Infine, esegui il commit di queste modifiche utilizzando git commit -m ".gitignore Fixed"

Puoi trovare il link all'articolo da cui ho trovato la soluzione qui .


1
Questa non è una soluzione praticabile basata sulla domanda originale. @ lagos-arpad ha chiesto specificamente una sottodirectory e non l'intero progetto. La tua soluzione rimuove tutto dal livello principale del repository git e questo non è un approccio raccomandato per affrontare questo problema.
justinhartman,

Anche se è solo una sottodirectory, questa soluzione ha funzionato per me dato che avevo a che fare con un solo file. Puoi per favore spiegare perché non è raccomandato?
SikanderBabwani,

1
Quello di cui hai avuto a che fare è irrilevante. Questa non è la risposta alla domanda ed è potenzialmente pericolosa come ha sottolineato l'altra risposta. Questo rimuove le cose sul repository remoto che non si desidera necessariamente.
RichieHH,

8

Stavo riscontrando questo problema e mi sono reso conto che git stava effettivamente ignorando correttamente i file / le cartelle, ma il mio editor di codice (codice di Visual Studio) era semplicemente difettoso e non "ingrigito" correttamente nella barra laterale dell'interfaccia utente. Ho riavviato VSCode e sono stati disattivati ​​come previsto.


Lo stesso qui: VS Code v1.30.2 (utente)
xinthose

Stessa cosa per me. Grazie mille per questa soluzione! Mi chiedevo perché il mio .gitignore non funzionasse fino a quando non ho provato a riavviare VS Code. Sono su Visual Studio Code v1.44.2.
Fritz Lim

6

Come aggiunta alla risposta accettata

git rm -r --cached /foo/bar/
git status

Quando lo faccio, il terminale mostra un sacco di rmfile in quella directory. Quindi, per evitare un altro commit che potrebbe influenzare inutilmente il telecomando, ho fatto:

git reset HEAD *
git status

Dopodiché, non ha detto nulla da impegnare e quando modifico i file all'interno /foo/bar/e faccio git statusancora ottengo nothing to commit.


1
Questo mi riporta a dove ho iniziato (il problema)
Shonubi Korede il
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.