Главная > Apple, Coding > SVN export without client app

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
Categories: Apple, Coding Tags: , , ,
  1. Пока что нет комментариев.
Подписаться на комментарии по RSS