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

суббота, 16 марта 2013 г.

SVN: Как мерджить из одной ветки в другую

Subversion была моей основной CVS более трёх лет. С Git я познакомился всего год назад. Не скажу что мой мир сильно изменился, но он мне показался более удобным. По-этому свои личные проекты я храню только в Git, а две недели назад даже купил Micro Plan на GitHub.

На работе же всё зависит от проекта: некоторые используют Git, остальные постепенно мигрируют с SVN на Git. Я сейчас работаю в команде, которая относится ко второму типу. По-этому я хочу рассказать о своем опыте мерджа из одной ветки в другую.

Нам понадобится Svnmerge.py и две ветки (например, http://svn.local/dev и http://svn.local/qa). Вторая ветка это копия первой, она была создана с помощью 'svn cp' и закомичена ревизией 12830.

Теперь предположим что у нас есть задача, реализацию которой мы запилили в dev-ветку. Список ревизий: 12834, 12839, 12845. Теперь нами стоит задача мерджа этих ревизий в qa-ветку.

1. Создаем папку и выполняем туда чекаут qa-ветки:
mkdir qa 
svn co http://svn.local/qa qa

2. После окончания чекаута нужно положить svnmerge.py в папку qa и сделать его исполняемым.
3. Заходим в папку qa и инициализируем dev-ветку. Эту единоразовая операция, ее не придется повторять в будущем:
svnmerge.py init -r1-12830 http://svn.local/dev
svn ci -F svnmerge-commit-message.txt

12830 это ревизия, в которой была создана qa-ветка. Мы записали в свойства бранча информацию о том, что в нем находится код dev-ветки с 1й по 12830й ревизии. Теперь у нас не получится повторно вмерджить эти ревизии.

4. Собираем необходимые ревизии и проверяем их наличие в dev/qa ветках:
svnmerge.py avail -r12834,12839,12845 -Shttp://svn.local/dev

Если это ревизии dev-верки и они не были ранее вмерджены в qa-ветку, то мы получим список доступных ревизий:
12834,12839,12845

Если какая-то из ревизий отсутствует в списке, на это может быть 2 причины:
  • Это не ревизия dev-ветки;
  • Это ревизия dev-ветки, но она уже была вмерджена в qa-ветку.

5. Мы предполагаем что у нас все хорошо и выполняем команду для мерджа:
svnmerge.py merge -r12834,12839,12845 -Shttp://svn.local/dev # мердж
svn st # проверяем изменения
svn ci -F svnmerge-commit-message.txt # комитим результат

Как видите все не так просто как в Git, но и сложного ничего нет :)

Читать далее

четверг, 28 февраля 2013 г.

SVN: делаем файл исполняемым

Последние 4 дня занимаюсь созданием CI билдов для TeamCity. Одна из задач - запускать php скрипты через Apache Ant. Для того чтобы его запускать нужно сделать его исполняемым. Вариант добавления 'chmod +x file' в Ant скрипт не подходит, так как это костыль.

Начал гуглить и нашел.

Чтобы сделать файл исполняемым необходимо выполнить:
svn propset svn:executable ON filename

Обратная операция:
svn propdel svn:executable ON filename

Читать далее

понедельник, 13 августа 2012 г.

Установка SVN на Mac OS X 10.8 – Mountain Lion

Вчера обновился на Mac OS X 10.8 – Mountain Lion и был неприятно удивлен отсутствием SVN (Subversion).

Установить его можно как минимум двумя способами. Если у вас есть последняя версия Xcode, установленная через Mac App Store, то просто инсталим Xcode > Preferences > Downloads > Command Line Tools > Install.

Command Line Tools содержит последнюю версию SVN. Но если вы не используете Xcode, то довольно глупо качать Xcode, который весит 1.5GB, ради одного SVN.

К счастью, есть простой путь установки SVN без Xcode. Пакет Command Line Tools доступен как отдельный пакет (116MB) через Apple Developer site. Для этого вам понадобится Apple Developer ID, но его можно получить очень просто и бесплатно на основе существующего AppleID.

После загрузки и установки пакета, вы можете проверить наличие SVN в системе с помощью Terminal, просто откройте его и введите svn --version. Ответ будет приблизительно таким:
$ svn --version

svn, version 1.6.18 (r1303927)
   compiled Jun 15 2012, 19:07:58

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.apache.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme

Хочу заметить, что данные 2 способа не являются единственными. Вы можете поставить SVN с помощью различных менеджеров пакетов. Например, Mac Ports, Homebrew, etc.
Читать далее

пятница, 3 февраля 2012 г.

github

На работе постепенно переводят проекты с SVN на Git. Причины разные, но основная причина в количестве людей и способе взаимодействия между нами (читай, проектами).

Лично я работаю с новой VCS уже 3ю неделю и переход мне напоминал стандартный порядок понимания новой технологии:
1. Че это такое? Уберите! Дайте мне сделать комит в SVN? Pull, push, stash? Что это такое? Мама, я хочу к тебе.
2. А чо если сделать тааак... А вот так? Ой.
3. Начинает нравиться (как и все, что ты понимаешь).

Радует, что все сотрудники понимали, что поймут полезность сего инструмента и в будущем мучения окупятся. Я считаю что работник, который знает SVN + Git это более ценный и универсальный член команды.

Теперь мне наконец-то пригодился мой аккаунт на github - https://github.com/sidorenko. Буду выкладывать в него свои сорцы модулей для Magento, которые я по чуть-чуть делаю в свободное время. Ну и еще что-то.
Читать далее

понедельник, 30 января 2012 г.

PhpStorm: работа с разными CVS (SVN + Git) в одном проекте

На прошлой неделе возникла необходимость работы с SVN и Git на одном проекте. По-умолчанию, PhpStorm работает только с одной CVS. Например, если вы сделали git clone, а потом внутри проекта создали папку tests и сделали туда svn checkout, то IDE будет видеть только Git. То есть, выполнить какие-либо действия (up, commit, etc.) в папке с тестами будет невозможно. Но это можно легко исправить.

1. Открываем настройки:

2. Заходим в Project Settings -> Version Control. Если у вас проект на Git, то картинка будет примерно следующей:

3. Нажимаем Add и добавляем папочку tests:

После этого в списке меню Project Settings -> Version Control появится наша новая запись:

4. Сохраняем настройки. Теперь можно выполнять SVN-команды над папкой tests прямо из IDE.
Читать далее

среда, 9 ноября 2011 г.

SVN: Обновление на старую ревизию

Иногда возникает необходимость обновить проект на более старую ревизию. Иными словами - "откатиться". Сделать это можно с помощью такой команды:
 svn update -r REV
где REV это номер необходимой ревизии.

Читать далее

суббота, 5 ноября 2011 г.

Удаление кеша SVN credentials в *nix

Вчера возникла необходимость передать свою виртуальную машину, с которой я работаю другому работнику. Причина была в том, что у него после ребута посыпалась файловая система. После нескольких попыток реанимации было принято решение об экспорте/импорте моей виртуалки.

Все успешно перенесли, но осталась необходимость сбросить SVN credentials в FreeBSD, чтобы он не комитил под моим именем. Все оказалось достаточно просто, т.к. все креденшелы лежат в папке .subversion/auth/svn.simple. Удаляем нужный файл/запись и все. При следующем операции с репозиторием необходимо будет ввести новые авторизационные данные.
Читать далее