git wildcard - удаляет все экземпляры подкаталога - PullRequest
5 голосов
/ 08 марта 2012

Я пытаюсь выполнить git rm --cached -r <folder>, чтобы рекурсивно удалить все экземпляры папки с именем .svn. Я пробовал это:

.svn
/.svn
/*/.svn
/*/*/.svn

etc 

И это работает, но я уверен, что есть более динамичный способ.

Спасибо

Ответы [ 5 ]

13 голосов
/ 08 марта 2012

Правильным решением будет:

find . -type d -name '.svn' -print0 | xargs -0 git rm --cached -r --

@ gregor's потерпит неудачу в каталогах с пробелами.

3 голосов
/ 08 марта 2012

find, трубы и xargs ваши друзья:

find . -name .svn | xargs git rm -r 
1 голос
/ 29 декабря 2017

Это сработало для меня:

find . -name '.svn' -print0 | xargs -0 git rm --cached --ignore-unmatch -r --

Спасибо @ steve76 за --ignore-unmatch

1 голос
/ 12 марта 2012
find . -name .svn -exec git rm -r --cached {} \;

Нет необходимости вызывать xargs, если вам не нужно.

1 голос
/ 08 марта 2012

Если у вас нет других изменений в вашем рабочем дереве (вы можете сначала их спрятать), возможно, есть более простой способ:

find -type d -name .svn -delete
git add -u
git commit -m 'remove svn folders -- no idea which maniac would stage them'

Если вы хотите только удалить их, но не удалить физически, используйте anton's answer :

find -type d -name .svn -print0 | xargs -0 git rm -r --cached
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...