2013-02-13 24 views

Odpowiedz

2

Dziękuję wszystkim za odpowiedzi, ale znalazłem dla mnie najbardziej dokładne rozwiązanie:

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

sed jest łatwy do ucieczki przestrzenie, które niespokojnych xargs i wszystko działa bardzo szybki i dokładny.

+0

zobacz moja odpowiedź, nie potrzebujesz tego wszystkiego :) – CharlesB

37

Nie trzeba find lub sed, można użyć symboli wieloznacznych, jak rozumie je git (nie zależy od powłoki):

git checkout -- "*.xml" 

Cytaty uniemożliwi powłokę, aby rozwinąć polecenia tylko pliki w bieżącym katalogu przed jego wykonaniem.

Można również wyłączyć rozszerzenie glob powłoki bash (z):

set -f 
git checkout -- *.xml 

To, oczywiście, będzie nieodwracalnie wymazać swoje zmiany!

+1

'*/*. Xml' nie jest" plikami xml we wszystkich katalogach ". – wRAR

+0

@wRAR znalazłem ... globowanie w git nie jest dobrze udokumentowane – CharlesB

+1

'**/*. Xml' użyje twoich skorup globs, więc usunięte pliki nie zostaną wyrejestrowane, ale jeśli to tylko zmiany, to powinno praca. – Reactormonk

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

lub coś równoważne jeśli system nie posiada find i xargs. Lub po prostu git checkout HEAD **/*.xml w zsh lub dowolnej innej powłoce z tą formą ponownego kodowania.

Powiązane problemy