È possibile "aggiornare" un repository git dopo aver aggiornato il file gitignore?
Ho appena aggiunto più ignoranze (?) Al mio gitignore e vorrei rimuovere le cose già nel repository corrispondenti al nuovo file.
È possibile "aggiornare" un repository git dopo aver aggiornato il file gitignore?
Ho appena aggiunto più ignoranze (?) Al mio gitignore e vorrei rimuovere le cose già nel repository corrispondenti al nuovo file.
Risposte:
La soluzione menzionata nel " file .gitignore non ignorato " è un po 'estrema, ma dovrebbe funzionare:
# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"
( assicurati di eseguire prima il commit delle modifiche che desideri conservare , per evitare incidenti come jball037 commenti di seguito .
L' --cached
opzione manterrà comunque i tuoi file intatti sul tuo disco.)
Hai anche un'altra soluzione più dettagliata nel post del blog " Far ignorare a Git i file già tracciati ":
git rm --cached `git ls-files -i --exclude-standard`
Bassim suggerisce nella sua modifica :
Nel caso in cui
fatal: path spec '...' did not match any files
venga visualizzato un messaggio di errore simile , potrebbero esserci file con spazi nel loro percorso.Puoi rimuovere tutti gli altri file con l'opzione
--ignore-unmatch
:
git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`
ma i file senza eguali rimarranno nel tuo repository e dovranno essere rimossi esplicitamente racchiudendo il loro percorso tra virgolette doppie:
git rm --cached "<path.to.remaining.file>"
Potrei fraintendere, ma stai cercando di eliminare i file appena ignorati o vuoi ignorare le nuove modifiche a questi file? In questo caso, la cosa funziona.
Se si desidera eliminare i file ignorati precedentemente sottoposti a commit, utilizzare
git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'
git ls-files -i –exclude-standard
git commit -m 'clean up ``
So che questa è una vecchia domanda, ma la soluzione di gracchus non funziona se i nomi dei file contengono spazi. La soluzione di VonC ai nomi di file con spazi è di non rimuoverli utilizzando --ignore-unmatch
, quindi rimuoverli manualmente, ma questo non funzionerà bene se ce ne sono molti.
Ecco una soluzione che utilizza array bash per acquisire tutti i file.
# Build bash array of the file names
while read -r file; do
rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)
git rm –-cached "${rmlist[@]}"
git commit -m 'ignore update'