tutorial - guida git pdf




Come smettere di tracciare e ignorare le modifiche a un file in Git? (10)

Ho clonato un progetto che include alcuni file .csproj . Non ho bisogno che i miei file csproj locali vengano tracciati da Git (o che vengano csproj durante la creazione di una patch), ma chiaramente sono necessari nel progetto.

Ho aggiunto *.csproj al mio *.csproj LOCAL, ma i file sono già nel repository.

Quando csproj git status, mostra le mie modifiche a csproj che non mi interessa tenere traccia di o inoltrare per patch.

Come rimuovo il "rilevamento" di questi file dal mio repository personale (ma li tengo nella sorgente in modo che io possa usarli) in modo che non vedo le modifiche quando faccio uno stato (o creo una patch)?

Esiste un modo corretto / canonico per gestire questa situazione?


Hai dimenticato il tuo .gitignore?

Se hai l'intero progetto localmente ma hai dimenticato di aggiungerti git ignora e ora stai monitorando alcuni file non necessari usa questo comando per rimuovere tutto

git rm --cached -r .

assicurati di essere alla base del progetto.

Quindi puoi fare il solito

Inserisci

git add .

Commettere

git commit -m 'removed all and added with git ignore'

Spingere

git push origin master

Conclusione

Spero che questo aiuti le persone che devono apportare modifiche al loro .gitignore o che abbiano dimenticato tutto insieme.

  • Rimuove l'intera cache
  • Guarda il tuo .gitignore
  • Aggiunge i file che si desidera tracciare
  • Spinge al tuo repo

Come sottolineato in altre risposte, la risposta selezionata è errata.

La answer a un'altra domanda suggerisce che potrebbe trattarsi di skip-worktree che sarebbe necessario.

git update-index --skip-worktree <file>

La risposta accettata non ha funzionato per me

ero solito

git rm -r --cached.

aggiungi git.

git commit -m "fixing .gitignore"

Ho trovato la risposta da here


La semplice chiamata a git rm --cached su ognuno dei file che si desidera rimuovere dal controllo di revisione dovrebbe andare bene. Finché i pattern di ignoranza locali sono corretti, non vedrai questi file inclusi nell'output di git status.

Si noti che questa soluzione rimuove i file dal repository, quindi tutti gli sviluppatori dovrebbero mantenere le proprie copie locali (non revisionate) del file

Per impedire a git di rilevare le modifiche in questi file, dovresti utilizzare anche questo comando:

git update-index --assume-unchanged [path]

Quello che probabilmente vorresti fare: (dal basso la risposta di @Ryan Taylor )

  1. Questo per dire a Git che vuoi la tua versione indipendente del file o della cartella. Ad esempio, non si desidera sovrascrivere (o eliminare) i file di configurazione / staging di produzione.

git update-index --skip-worktree <path-name>

La risposta completa è qui in questo URL: http://source.kohlerville.com/2009/02/untrack-files-in-git/


Per dire a Git di non tracciare le modifiche al tuo file / cartella locale (il che significa che lo stato di git non rileva le modifiche ad esso), fai:

git update-index --skip-worktree path/to/file

E dire a Git di tenere traccia delle modifiche alla tua versione locale ancora una volta (in modo da poter commettere le modifiche), fare:

git update-index --no-skip-worktree path/to/file

Per ignorare eventuali modifiche a tutti i file (di un certo tipo) in una directory, ho dovuto combinare alcuni di questi approcci, altrimenti i file sono stati creati se prima non esistevano.

Nel seguito, "excludedir" è il nome della directory a cui non desidero guardare le modifiche.

Innanzitutto, rimuovi tutti i nuovi file esistenti dalla cache di tracciamento delle modifiche (senza rimuovere dal tuo file system).

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

Puoi fare lo stesso con le modified: renamed: è un po 'più complicato, dato che dovrai guardare il post -> bit per il nuovo nome file, e fare il pre -> bit come descritto per deleted: seguito.

deleted: file si dimostrano un po 'più complicati, in quanto non è possibile aggiornare l'indice per un file che non esiste sul sistema locale

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

L'ultimo comando nell'elenco sopra rimuoverà nuovamente i file dal tuo file system, quindi sentitevi liberi di ometterlo.

Quindi, blocca il rilevamento delle modifiche da quella directory

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/

Per risparmiare un po 'di tempo le regole che aggiungi al tuo .gitignore possono essere utilizzate per rimuovere più file / cartelle, ad es

git rm --cached app/**/*.xml

o

git rm --cached -r app/widgets/yourfolder/

eccetera


Questo è un processo in due fasi:

  1. Rimuovi il tracciamento di file / cartella - ma tienilo su disco - usando

    git rm --cached 
    

    Ora non si presentano come "modificati" ma mostrano comunque come

        untracked files in  git status -u  
    
  2. Aggiungili a .gitignore


Suppongo che tu stia cercando di rimuovere un singolo file da git tacking. per quello raccomanderei sotto il comando.

git update-index --assume-immutato

Ex-git update-index --assume-unchanged .gitignore .idea / compiler.xml


Suppongo che tu stia chiedendo come rimuovere TUTTI i file in una cartella specifica o nella cartella bin, piuttosto che selezionare ciascun file separatamente.

Puoi usare questo comando:

git rm -r -f /<floder-name>\*

Assicurati di essere nella directory principale di quella directory.
Questo comando "cancellerà" tutti i file che si trovano nel cestino / o nella build / cartelle. Con la parola delete intendo che git farà finta che quei file siano "cancellati" e quei file non verranno tracciati. Il git contrassegna davvero quei file in modo cancellazione.

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





git