Elimina temporaneamente i file da git


449

Ho installato un git locale sulla mia macchina. Quando ho inizializzato git, ho aggiunto librerie e binari precompilati. Tuttavia, ora durante il mio sviluppo non voglio controllare questi file in modo intermittente. Non voglio rimuovere questi file dal repository. Esiste un modo per non tenere traccia di questi file fino a quando non ho completato il mio sviluppo. (Penso di non poter usare .gitignore in quanto funziona solo per quei file che non sono in git. Voglio disabilitare temporaneamente il tracciamento dei file.)



Risposte:


722

git update-index dovrebbe fare quello che vuoi

Questo dirà a git che vuoi iniziare ignorando le modifiche al file
git update-index --assume-unchanged path/to/file

Quando vuoi ricominciare a tenere traccia
git update-index --no-assume-unchanged path/to/file

Documentazione Github: update-index


3
Finalmente un comando che funziona davvero per il mio file dev deviato accidentalmente, grazie :)
Richard de Wit,

15
Perché non git rm -r --cached <file>?
Ehsan,

23
@Ehsan sembra git rm --cachedportare a una cancellazione delle copie locali su altre macchine, dove viene estratto lo stesso ramo, al loro prossimo pull. Vedi arlocarreon.com/blog/git/… e in particolare la discussione sottostante.
mit

3
Non funziona per me, quando apporto modifiche al file viene comunque aggiunto alle modifiche incluse. Potrei escludere, ma poi ad un certo punto probabilmente verrà aggiunto accidentalmente.
MrFox,

8
assumere-immutato non era pensato per questo scopo. Potrebbe voler leggere questa discussione
Appy,

264

potresti mantenere i tuoi file non tracciati dopo

git rm -r --cached <file>

aggiungi i tuoi file con

git add -u

spingono o fanno quello che vuoi.


19
Questa è in realtà la risposta giusta secondo: git-scm.com/book/en/v2/…
Ehsan

git rm --cached .DS_Store poi stampa rm '../.DS_Store'E il file locale viene eliminato ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng,


4
Questa non è la risposta corretta perché rimuoverà il file nel sorgente. L'OP vuole ignorare le modifiche locali di quel file, non rimuovere del tutto il tracciamento per esso
cjsimon

2
ATTENZIONE: rimuoverà anche i file che si desidera estrarre. La soluzione è copiare tutti i file da qualche parte e copiarli nuovamente dopo il commit.
psad,

111
git rm --cached

Tuttavia, non dovresti commettere binari compilati e dipendenze esterne in primo luogo. Usa invece uno strumento come Bundler per inserirli.


2
Non dimenticare l'opzione -r (ricorsiva) per le directory: git rm -r --cached
Anatoliy Shuba

36

Utilizzare il comando seguente per annullare la traccia dei file

git rm --cached <file path>

7

Il git-book lo menziona nella sezione 2.4: "Annullare le cose". Fondamentalmente, ciò che devi fare è ripristinare lo stato dell'indice per alcuni file allo stato HEAD, ovvero allo stato dell'ultimo checkout (o commit). Ciò annulla la gestione temporanea del file nell'indice corrente. Il comando per questa attività è git reset. [1]

Quindi, il comando che devi eseguire è:

git reset HEAD /path/to/file

Le versioni più recenti di git (credo dalla 1.6 o giù di lì) danno questo comando (e molti altri) come suggerimento durante l'esecuzione git status. Queste versioni sono molto intuitive. Un consiglio personale: se stai mettendo in scena solo pochi file, usa git add -i. Ciò avvierà lo strumento di stadiazione interattiva, il che rende le cose particolarmente facili. Inoltre, consiglio vivamente di leggere il libro, poiché è molto esplicito sull'uso di git in situazioni pratiche.

[1] http://www.git-scm.com/book


Sono d'accordo che git reset [file]è il modo più semplice per estrarre i file dal palco.
Spectral,

18
annullare e non tracciare sono cose diverse
Jaime Sangcap,

6

Non una risposta alla domanda originale. Ma questo potrebbe aiutare qualcuno.

Per vedere le modifiche apportate ( sapere quali file sono contrassegnati come --assume-invariato )

git ls-files -v

L'elenco dei file risultante avrà un prefisso con un carattere (es: H o h) Se è in minuscolo (cioè h), il file è stato contrassegnato --assume-invariato


5

Suppongo che tu stia chiedendo come rimuovere TUTTI i file nella cartella build o nella cartella bin, piuttosto che selezionare ogni file separatamente.

Puoi usare questo comando:

git rm -r -f /build\*

Assicurati di trovarti nella directory principale della directory build.
Questo comando "eliminerà" ricorsivamente tutti i file che si trovano nel bin / o build / cartelle. Con la parola cancella intendo che git farà finta che quei file siano "cancellati" e quei file non saranno tracciati. Git contrassegna davvero quei file in modalità di eliminazione.

Assicurati di avere il tuo .gitignore pronto per i prossimi commit.
Documentazione: git rm


1

git reset [file]

Ripristina il file dall'area di gestione temporanea alla directory di lavoro

Spesso dimentico di aggiungere i moduli del mio nodo al file .gitignore, questo risolve quel problema.


1

Questo ha funzionato per me

git reset HEAD 'nome file'


1

Per rimuovere tutti i file Untrack. Prova questo comando terminale

 git clean -fdx

Rimuoverà i file dal disco e non dalla cronologia di git.
Leonardo

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.