2012-06-21 13 views
83

Qualche tempo fa ho fatto questo per ignorare le modifiche a un file tracciato da git:Undo git update-index --skip-worktree

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

Ora io in realtà voglio commettere modifiche a tale file sorgente. Come annullare gli effetti di skip-worktree?

Grazie, Kevin

+7

Mi interessa anche come ottenere l'elenco dei file nello stato 'skip-worktree'? – troex

+0

@troex https://stackoverflow.com/q/42363881/1615903 – 1615903

risposta

107

Aha! Voglio semplicemente:

git update-index --no-skip-worktree <file> 
+0

I love the Aha! –

+0

lol should of known –

29

Secondo http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html, utilizzare

git ls-files -v

per vedere la "assumere invariato" e file "saltare-worktree" contrassegnate con una lettera speciale. I file "skip-worktree" sono contrassegnati con S.

Edit: Come @amacleod menzionato, rendendo un alias per elencare tutti i file nascosti è un bel trucco per avere in modo che non c'è bisogno di ricordarlo. Io uso alias hidden="git ls-files -v | grep '^S'" nel mio .bash_profile. Funziona alla grande!

+8

Neat. Posso usare 'git ls-files -v | grep '^ S'' per elencare solo i file che ho "nascosto" con skip-worktree. Speravo di rendere un alias "nascosto" per quel comando, ma mettere un reindirizzamento del pipe nell'alias non sembrava funzionare. – amacleod

+4

@amacleod usa un '!'. In questo modo '[alias] ignorato =! Git ls-files -v | grep "^ S" 'Testato, funziona. –

+0

@amacleod Non supponete di poter suggerire un comando alternativo per Windows? –

11

Se si desidera annullare tutti i file che è stato applicato salto worktree, è possibile utilizzare il seguente comando:

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree 
  1. git ls-files -v stamperà tutti i file con il loro status
  2. grep -i ^S filtrerà i file e selezionare ignora worktree (S) o salta l'albero di lavoro e assume invariato/i, -i significa ignora maiuscole e minuscole
  3. cut -c 3- rimuoverà lo stato e lascerà solo i percorsi, tagliando dal carattere 3-rd alla fine
  4. tr '\012' '\000' sostituirà carattere di fine riga (\ 012) a carattere zero (\ 000)
  5. xargs -0 git update-index --no-skip-worktree passerà tutti i percorsi separati per carattere zero a git update-index --no-skip-worktree per annullare
+0

Questo è il migliore risposta – Dev

0

Sulla base @ GuidC0DE risposta, ecco una versione per PowerShell (io uso posh-git)

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)}) 

E come riferimento anche il comando opposta per nascondere i file:

0.123.
git update-index --skip-worktree $(git ls-files --modified)