Ignora i file modificati (ma non impegnati) in git?


182

Posso dire a git di ignorare i file che vengono modificati (eliminati) ma che non devono essere sottoposti a commit?

La situazione è che ho una sottodirectory nel repository che contiene elementi che non mi interessano affatto, quindi l'ho eliminata per evitare che compaia in completamenti automatici e simili (nell'IDE).

Ma ora, se aggiungo quella cartella a .gitignore, semplicemente nulla cambia, tutto il materiale viene mostrato come cancellato dallo stato git.

C'è un modo per far ignorare Git in entrambi i modi?

(In alternativa, mentre sto usando git-svn, posso eseguire il commit delle modifiche al git locale e assicurarmi che non vengano trasmesse al repository svn?)


invece di contrassegnarli come non modificati nell'indice di pronti contro termine, è possibile rimuoverli completamente dall'indice. Quindi, mentre avrai ancora il file nella tua directory di lavoro, l'indice repo può essere completamente cancellato e git non lo vedrà nemmeno come se fosse esistito. Si prega di consultare il link nella mia risposta di seguito.
MaurerPower

Risposte:


274

controlla la pagina man git-update-index e il bit --assume-invariato e relativi.

quando ho il tuo problema lo faccio

git update-index --assume-unchanged dir-im-removing/

o un file specifico

git update-index --assume-unchanged config/database.yml

3
Puoi elencare in qualche modo tutti i tuoi file ignorati?
Zitrax

21
Puoi recuperare i file congit update-index --no-assume-unchanged config/database.yml
Denis Kniazhev,

1
Vedi la risposta di Dave L di seguito per una soluzione più recente senza alcune carenze di --assume-unchanged.
Ben Challenor

2
È possibile aggiungere questo al file di configurazione del repository, invece di eseguire questo comando manualmente ogni volta?
Tim Boland,

1
Apparirà modificato per il prossimo commit? Non voglio che sia considerato invariato per sempre.
Pranav Nandan,

41

Un'opzione più recente e migliore è quella git update-index --skip-worktreeche non andrà persa in caso di hard reset o di una nuova modifica da un pull.

Vedi la pagina man su http://schacon.github.com/git/git-update-index.html

E un confronto su http://fallengamer.livejournal.com/93321.html


9
Uno svantaggio da notare è che una volta che le modifiche di un file sono state nascoste skip-worktree, trovare questi file è un po 'complicato. L'unico modo che conosco è git ls-files -v |grep -v '^H'. Inoltre, molti strumenti della GUI non sono a conoscenza di questa funzione e possono produrre errori divertenti se, ad esempio, checkoutfalliscono a causa di file modificati "nascosti".
sleske,

Non sono mai stato in grado di comprendere QUALSIASI dei file git doc. Quindi questo non è di grande aiuto. (Ogni file doc presuppone che tu capisca le sottigliezze di ogni altro file doc!)
Scott Biggs

7

Usa questo codice

git update-index --assume-unchanged file-name

1
Molto interessante. Devo usare un passord nel mio progetto maven ma non voglio pubblicarlo su un repository git, quindi inserisco un segnaposto senza valore in local, properties, lo commetto, quindi inserisco la password, ma segnare il file invariato con il comando suggerito. Quindi la password non è pubblicata.
Stefano Scarpanti,

6

I file tracciati non possono essere ignorati, quindi dovrai prima rimuoverli dal tuo indice. Aggiungi un .gitignoreche ignora le directory che non desideri, quindi eliminale e rimuovi tutti gli sbandati git rm --cached.


1
Hm, provo questo, ma poi ho tutti i file elencati come eliminati. Dovrei commetterlo e il --cached causerà che non verrà spinto ai telecomandi? O ho avuto sth. sbagliato? Il più importante per me non è corrompere il repository remoto (svn).

1
Non puoi impegnare nulla che non inizi nel tuo indice. git rm - memorizza nella cache tutto ciò che non vuoi impegnare, quindi aggiungi localmente un file .gitignore che contiene "*". Ora, non importa quanto aggiungi, non vedrai mai più quei file nel tuo indice.
John Feminella,

Ah, penso di aver capito - ora allegato .. Rimuove solo le cose dall'indice e lascia da solo l'albero di lavoro .. Non sono sicuro che mi manchi qualcosa, ma AFAIS sto cercando il contrario , rimuovendolo dall'albero di lavoro senza toccare l'indice .. O posso usarlo in qualche modo?

6

Quello che faccio di solito è

git stash

git qualunque cosa

git stash si applica

git stash chiaro


10
in seguito puoi anche 'git stash pop' per fare quegli ultimi due contemporaneamente (anche se 'git stash clear' cancellerà TUTTE le voci di stash, se lo desideri).
Groxx,
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.