2013-02-13 12 views

risposta

2

Grazie a tutti per le vostre risposte, ma ho trovato, per me, la soluzione più accurata:

git diff --name-only -- '*.xml' | sed 's, ,\\&,g' | xargs git checkout -- 

sed è utente di sfuggire spazi che turbavano xargs e tutto funziona molto veloce e preciso.

+0

vedi la mia risposta, non hai bisogno di tutto questo :) – CharlesB

37

Non è necessario find o sed, è possibile utilizzare i caratteri jolly come git li capisce (non dipende dalla vostra shell):

git checkout -- "*.xml" 

Le quotazioni evitare che la shell di espandere il comando da solo file nella directory corrente prima della sua esecuzione.

È possibile anche disattivare l'espansione glob shell (con bash):

set -f 
git checkout -- *.xml 

Questo, naturalmente, sarà irrimediabilmente cancellare le modifiche!

+1

'*/*. Xml' non è" file xml in tutte le directory ". – wRAR

+0

@wRAR lo trova ... il globbing in git non è molto ben documentato – CharlesB

+1

'**/*. Xml' userà i tuoi globi di shell, quindi i file cancellati non verranno controllati, ma se sono solo modifiche, questo dovrebbe lavoro. – Reactormonk

-1
find . -name '*.xml' -print0 | xargs -0 git checkout HEAD 

o qualcosa di equivalente se il sistema non ha find e xargs. O solo git checkout HEAD **/*.xml in zsh o qualsiasi altra shell con questa forma di globbing reqursive.

Problemi correlati