Il modo in cui Git ignora la visione / il monitoraggio di un determinato dir / file. hai appena eseguito questo:
git update-index --assume-unchanged <file>
Ora come si fa a annullarlo in modo che vengano guardati di nuovo? (Chiamiamolo un-assume).
Il modo in cui Git ignora la visione / il monitoraggio di un determinato dir / file. hai appena eseguito questo:
git update-index --assume-unchanged <file>
Ora come si fa a annullarlo in modo che vengano guardati di nuovo? (Chiamiamolo un-assume).
Risposte:
Per ottenere annulla / mostra i file / dir impostati su assume invariato, esegui questo :
git update-index --no-assume-unchanged <file>
Per ottenere un elenco di dir / file che assume-unchangedeseguono questo :
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-, che ti darà solo i nomi dei file, senza il prefisso "h".
assume-unchangedusi, basta usare git update-index --really-refresh. Con quel comando, non è necessario cercare git ls-filesprima i file .
Se questo è un comando che usi spesso, potresti prendere in considerazione l'idea di avere anche un alias. Aggiungi al tuo globale .gitconfig:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
Come impostare un alias (se non lo sai già):
git config --configLocation alias.aliasName 'command --options'
Esempio:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
Dopo .gitconfigaverlo salvato sul tuo , puoi eseguire un comando più pulito.
git hide myfile.ext
o
git unhide myfile.ext
Questa documentazione git è stata molto utile.
Come da commenti, questo è anche un utile alias per scoprire quali file sono attualmente nascosti:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | cut -c3-
La funzione git update-index ha diverse opzioni che puoi trovare digitando di seguito:
git update-index --help
Qui troverai varie opzioni: come gestirle con la funzione update-index.
[se non conosci il nome del file]
git update-index --really-refresh
[se conosci il nome del file]
git update-index --no-assume-unchanged <file>
ripristinerà tutti i file che sono stati aggiunti nell'elenco ignora.
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>mi ha salvato la vita .. ok, potrei solo sincronizzare di nuovo la cartella, ma volevo una soluzione "reale" per questo problema.
Per sintetizzare le eccellenti risposte originali di @adardesign, @adswebwork e @AnkitVishwakarma e i commenti di @Bdoserror, @Retsam, @seanf e @torek, con collegamenti di documentazione aggiuntivi e alias concisi ...
Comandi di base
Per ripristinare un file che è rimasto invariato alla normalità:
git update-index --no-assume-unchanged <file>
Per elencare tutti i file che rimangono invariati:
git ls-files -v | grep '^[a-z]' | cut -c3-
Per ripristinare tutti i file presupposti invariati alla normalità:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
Nota: questo comando che è stato elencato altrove non sembra più ripristinare tutti i file invariati (credo che l'abbia usato e precedentemente elencato come soluzione):
git update-index --really-refresh
Tasti di scelta rapida
Per semplificare l'esecuzione di queste attività comuni in git, aggiungi / aggiorna la seguente sezione alias.gitconfig per il tuo utente (ad es. ~/.gitconfigSu un sistema * nix o macOS):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
git hiddenpuoi ottenere lo stesso effetto senza alias o script di shell, usando in !questo modo:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refreshnon cancella (o non lo fa più, forse una volta) i flag assume invariati sui file di indice.
Se si desidera annullare tutti i file applicati assumere invariato con qualsiasi stato, non solo memorizzato nella cache (git li contrassegna per carattere in minuscolo), è possibile utilizzare il seguente comando:
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v stamperà tutti i file con il loro statogrep '^[a-z]' filtrerà i file e selezionerà solo presupposto invariatocut -c 3- rimuoverà lo stato e lascerà solo i percorsi, tagliando dal terzo carattere alla finetr '\012' '\000' sostituirà il carattere di fine riga (\ 012) con zero (\ 000)xargs -0 git update-index --no-assume-unchangedpasserà tutti i percorsi separati da zero git update-index --no-assume-unchangedper annullareAggiungendo alla @adardesignrisposta, se si desidera ripristinare tutti i file che sono stati aggiunti assume-unchangedall'elenco no-assume-unchangedin una volta sola, è possibile effettuare le seguenti operazioni:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
Questo eliminerà semplicemente i due caratteri emessi da grep "h ", ad esempio , quindi sfuggirà a tutti gli spazi che potrebbero essere presenti nei nomi dei file e infine || trueimpedirà al comando di terminare prematuramente nel caso in cui alcuni file nel ciclo abbiano errori.
Se stai usando le estensioni Git , segui i passaggi seguenti:
Hai fatto.
Niente qui che non è coperto. Ma vorrei aggiungere i miei 2 centesimi. A volte, eseguo una build e cambia molti file e quindi voglio lavorare su qualcosa, quindi questo comando mi aiuta davvero molto.
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
Spero che qualcun altro lo trovi utile.
.gitignoreper ignorare i tuoi manufatti di costruzione.
.gitignorema questo è a volte, nella mia esperienza non è sufficiente. Ma capisco il contesto in cui lo stai dicendo.
Nessuna delle soluzioni ha funzionato per me in Windows: sembra usare maiuscole Hpiuttosto che hper lo stato del file e il comando grep richiede un punto di inserimento aggiuntivo in quanto ^rappresenta anche l'inizio della riga e nega il carattere successivo.
Soluzione Windows
git ls-files -v | grep '^^H' per elencare tutti i file non memorizzatigit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree per annullare il salto dei file di tutti i file eseguiti tramite update-index --skip-worktreegit ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged per annullare il salto dei file di tutti i file eseguiti tramite update-index --assume-unchangedgit ls-files -v | grep '^^H' per elencare nuovamente tutti i file non memorizzati nella cache e verificare se i comandi precedenti hanno funzionato - questo non dovrebbe restituire nulla