Показаны сообщения с ярлыком SVN. Показать все сообщения
Показаны сообщения с ярлыком SVN. Показать все сообщения

11 нояб. 2013 г.

SVN: работа с файлами, содержащими "@" в имени

Не первый раз сталкиваюсь с тем, что при работе из командной строки SVN игнорирует правую часть имени файла после символа @. Решается это добавлением после имени файла еще одной собаки @, чтобы SVN знала, что символ @ в имени файла — не последний символ. Например вот так:
svn add somefile@2x.png@

14 янв. 2013 г.

Пара алиасов для SVN

Пара алиасов для более удобного использования svn:
#вывод всех изменений, кроме не контролируемых
alias svnm='svn stat | egrep -v "^(\? )"'
#варианты для апдейта ;)
alias svnup='svn up'
alias svnupcheg='svnup'
alias svnupchik='svnup'
Добавить в файл ~/.bashrc или ~/.profile (в Mac OS) и пользовать по надобности

26 нояб. 2012 г.

SVN : branches and tags

Небольшая напоминалка по поводу использвоания таких фич SVN как branches и tags. Функция бранчей и тагов уже достаточно описана. В двух словах — это параллельный набор исходников (ну, или того, что хранится в SVN). С помощью branch обеспечивается безопасное внесение изменений без затрагивания основной (trunk) копии сорцов. После окончания внесения изменений, проверки и тестирования версии продукта в бранче производится его перенос в основную ветку - транк. Это может быть совмещение (merge), может быть замена транка бранчем... Зависит от политики и настроения. Назначение tag аналогично за исключением того, что после создания копии транка в тэге эта копия не предполагает изменения. Тэги еще называют метками (labels). Их делают для того, чтобы в репозитории хранился моментальный снимок сорцов на какой-то определенный момент времени. Например, для каждого релиза создается тэг, к которому можно откатиться в случае необходимости. В случае SVN и trunk, и branch, и tags - обычные директории, выполняющие свои специфические функции на уровне соглашения. Предполагается, что содержимое директории %PROJECT_REPO%/tags не изменяется - только создается новая поддиректория для каждого из тэгов. Директория %PROJECT_REPO%/branches используется для хранения бранчей. Но при этом ничто, кроме здравого смысла, не мешает пользователю назвать эти директории по-своему или вносить изменения в тэги. Как бы то ни было, напоминалка! Создание бранча/тэга в предположении, что проект лежит в ~/work/project/:
mkdir -p ~/work/project/tags/rc1
svn add ~/work/project/tags/rc1
svn ci -m "rc1 tag added" ~/work/project/tags/rc1

svn copy -m "Some comment" https://svn.server:port/svn/currentProject/trunk/ https://svn.server:port/svn/currentProject/tags/rc1/

svn up
Для создания бранча последовательность аналогична:
mkdir -p ~/work/project/branches/camelStyleInvolving
svn add ~/work/project/branches/camelStyleInvolving
svn ci -m "rc1 tag added" ~/work/project/branches/camelStyleInvolving

svn copy -m "Some comment" https://svn.server:port/svn/currentProject/trunk/ https://svn.server:port/svn/currentProject/branches/camelStyleInvolving/

svn up
Для переключения локальной копии репозитория в нужный бранч/тэг нужно выполнить следующую команду в директории, соответствующей основной ветке (в данном случае это ~/work/project/):
cd ~/work/project/trunk
svn switch https://svn.server:port/svn/currentProject/branches/camelStyleInvolving/ ./
указание текущей директории "./" можно опустить, но лучше ее указывать явно, чтобы избежать неприятных промахов. При этом в локальную копию транка помещаются файлы из бранча. То есть, для среды разработки пути и расположение файлов не изменяется. Меняется только их содержимое. Ну, и чтобы вспомнить в какой ветке сейчас находится локальная версия репозитория, можно использовать команду svn info:
svn info
Эти действия предполагают работу в консоли bash. Подобные действия можно производить и в консоли Windows-окружения. Для графического интерфейса действия зависят от используемого SVN-клиента.

17 июн. 2012 г.

SVN + Apache + Nginx. Ошибка коммита изображений

После переезда на новый хостинг столкнулся с тем, что SVN не хочет коммитить файлы изображений (jpg, png, etc). Выдает примерно такие ошибки:
Adding  (bin)  icon57x57.jpg
svn: Commit failed (details follow):
svn: Server sent unexpected return value (405 Not Allowed) in response to PROPFIND request for '/svn/!svn/wrk/6ec81701-d224-4232-851b-23f6d87b9e06/Bzzzer2/icon57x57.jpg'
svn: Server sent unexpected return value (405 Not Allowed) in response to PROPFIND request for '/svn/Bzzzer2/icon57x57.jpg'
Оказалось, что на сервере установлен Nginx, который и мешает загрузке картинок на сервер. Остальные файлы он игнорирует, ибо они не относятся к вебу - проекты Objective-C и C++. Для исправления этого положения нужно внести директорию репозитория в список игнорируемых Nginx-ом путей. Делается это в разделе
location ~* ^/(awstats/|webmail/|phpmyadmin/|server-status/|backups/|svn/) {^M
                        proxy_pass http://80.91.191.246:8080;^M
                        proxy_redirect http://sapisoft.com:8080/ /;^M
                        proxy_set_header Host $host;^M
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;^M
                        proxy_set_header X-Real-IP $remote_addr;^M
                }^M
соответствующего файла конфигурации соответствующего хоста, например /etc/nginx/vhosts/yourhost.com.cfg

6 июн. 2012 г.

*x. svn + vimdiff = тру!

Небольшое описание настройки SVN с тем, чтобы дефолтным менеджером сравнения использовался трушный vimdiff (специальный режим работы vim). У SVN есть команда diff, которая сравнивает указанный файл с его предыдущими ревизиями - по умолчанию с предыдущей. И, опять-таки по умолчанию, она выводит список различий в довольно таки неудобочитаемом формате. Для использования внешнего менеджера различий нужно указать в командной строке модификатор --diff-cmd <команда запуска менеджера>, либо прописать <команда запуска менеджера> в файле ~/.subversion/config в параметре diff-cmd. Но не все так просто. SVN в дополнение к именам файлов передает менеджеру еще 5 параметров. При брутальном указании vimdiff он начинает ругаться на несуществующие файлы и отсутствующие команды. Для обхода этого используем unix-way - скрипты. Итаг:

1. создаем следующий файл bash-скрипта:
#!/bin/sh

# Configure your favorite diff program here.
VIMDIFFCMD="/usr/bin/vimdiff"

# Subversion provides the paths we need as the sixth and seventh
# parameters.
LEFT=${6}
RIGHT=${7}

# Call the diff command (change the following line to make sense for your merge program).
$VIMDIFFCMD "$LEFT" "$RIGHT"

называем его как-то типа svndiff.sh, устанавливаем права доступа для выполнения
chmod +x svndiff.sh
и кладем где-то в $PATH - можно в домашней директории, можно в /usr/local/bin - куда руки дотянутся.

2.  Далее в файле ~/.subversion/config добавляем/заменяем строку:
diff-cmd = svndiff.sh

Ну и в принципе все. Делаем
svn diff <filename>
и пользуемся правильными инструментами.