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-unchanged
eseguono 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-unchanged
usi, basta usare git update-index --really-refresh
. Con quel comando, non è necessario cercare git ls-files
prima 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 .gitconfig
averlo 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. ~/.gitconfig
Su 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 hidden
puoi ottenere lo stesso effetto senza alias o script di shell, usando in !
questo modo:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
non 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-unchanged
passerà tutti i percorsi separati da zero git update-index --no-assume-unchanged
per annullareAggiungendo alla @adardesign
risposta, se si desidera ripristinare tutti i file che sono stati aggiunti assume-unchanged
all'elenco no-assume-unchanged
in 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 || true
impedirà 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.
.gitignore
per ignorare i tuoi manufatti di costruzione.
.gitignore
ma 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 H
piuttosto che h
per 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-worktree
git 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-unchanged
git 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