Home > Apple, Coding > SVN export without client app

SVN export without client app

February 29th, 2012 Leave a comment Go to comments

Небольшая заметка об использовании 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
Categories: Apple, Coding Tags: , , ,
  1. No comments yet.