SVN export without client app
Небольшая заметка об использовании SVN на OS X. Не могу найти нормального бесплатного клиента SVN. Штатный xcode клиент выносит мне мозг, плюс ко всему ограничен в функциях — не может сделать банальный export (скачать определеную папку без своих запчастей .svn). Долго искал аналог Tortoise Repo Browser (по моему мнению — самый лучший GUI клиент), нашел нечто (SCPlugin), но, вероятно, в виду своей бесплатности он очень страшный и к тому же не развивается (последний релиз в 2010 году). Самое на мой взгляд приличное для мак решение — это Versions, но он обладает большим недостатком — ценой)) Чувствую, все-таки раскошелюсь в ближайшем будущем. А пока, для того, чтобы реализовать рекурсивную очистку проекта от миллиона вложенных папок .svn я применил такой workaround
Сначала хотел как всегда прибегнуть к своему любимому php, но потом решил все-таки использовать средства штатного интерпретатора команд bash. Все, что нужно для магии магии — это команды find, pwd, rm, ну и echo для красоты и информативности. Команда find выводит результаты поиска.
$ find . -type d -name .svn ./.svn ./sourceA/.svn ./sourceB/.svn ./sourceB/module/.svn ./sourceC/.svn
Далее можно все это дело направить на вход команде rm:
$ rm -rf `find . -type d -name .svn`
Оформим это дело в завершенный скрипт:
#!/bin/bash echo "removing .svn directories from" pwd rm -rf `find . -type d -name .svn`
сохраним в файле rsvn, поместим его в какую-либо директорию, прописанную в переменной окуржения PATH, например, в /usr/bin.
Затем назначаем права исполнения:
chmod 777 /usr/bin/rsvn
и можно пользоваться.
ОЧЕНЬ ВАЖНО перед использованием скрипта убедиться, что bash находится именно в той директории, которую собираемся вычищать. Иначе можно наделать делов. Поэтому, давайте ка допишем немного скрипт. Перед удалением он будет спрашивать подтверждение наших намерений (с показом текущей директории).
#!/bin/bash function confirm() { echo -n "$@ " read -e answer for response in y Y yes YES Yes Sure sure SURE OK ok Ok do if [ "_$answer" == "_$response" ] then return 0 fi done # if something typed other than y Y yes YES Yes Sure sure SURE OK ok Ok nothing happens return 1 } echo Do you really want to remove svn details from pwd confirm ? [yes/no] if [ $? -eq 0 ] then echo "removing .svn directories from" pwd rm -rf `find . -type d -name .svn` echo Done. fi