Apache Subversion (SVN) — централизованная система управления версиями, то есть для хранения всех файлов и совместной работы используется центральный сервер (или ПК). Так что без дополнительных ухищрений, без доступа к серверу разработка будет весьма проблематичной.
Система уже много лет активно используется в среде разработчиков, но из-за своей обширности и функциональности не все пользователи знают полный набор функций SVN, способных облегчить их жизнь.
SVN умеет выгружать рабочие каталоги из разных каталогов одного или нескольких хранилищ. Система сопоставляет локальные папки с удаленными, причем, можно обозначить требуемую версию или правку.
Для этого используется свойство svn:externals. Команда выглядит примерно так:
svn propset svn:externals test_proj
Откроется текстовый редактор, в котором и нужно прописать пути
Есть и более удобный вариант. Нужно создать файл, к примеру svn.externals. Его нужно наполнить в виде:
ext-comp/sounds http://sounds.someweb.com/test ext-comp/skins/toolkit -r32 http://svn.someweb.com/repos/skin-maker
Таких компонентов может быть много, причем, с указанием ревизии
После этого нужно установить этот файл в качестве источника для внешних зависимостей:
svn propset svn:externals -F svn.externals .
Свойство будет применено к текущей директории
Теперь осталось закомитить и апдейтнуть рабочие файлы.
Если у вас нет доступа/разрешения на изменение главного репозитория или просто нет смысла комитить текущие изменения, которые все же необходимо внести, можно применить патч.
По сути это текстовый файл, который содержит все внесенные изменения. Чтобы его создать необходимо перейти в корень и выполнить:
svn diff > ^/fix.diff
Файл будет сохранен в корневом каталоге
А для применения нужно выполнить:
svn patch fix.diff
Патч будет применен для корневого каталога
Когда приходится работать с несколькими проектами одновременно, директории могут засориться ненужными файлами, которые могут понадобиться для выкатки, но не нужны в разработке. Чтобы не выкачивать лишние файлы и папки, в svn их можно просто исключить. То есть, они будут лежать на главном репозитории, но не будут добавляться к рабочим файлам во время выполнения checkout и update.
Чтобы исключить каталоги, нужно выполнить update с опциями –set-depth exclude:
$ svn update --set-depth exclude many-dirs/unwanted-dir D many-dirs/unwanted-dir
Директории и файлы удаляются только на компьютере клиента
Так как в svn хранятся все данные об внесенных изменениях и полный лог разработки, то система позволяет исправлять ошибки и даже восстанавливать файлы. Вариантов несколько.
В случаях, когда в рабочую копию были внесены изменения, но что-то не работает и нужно вернуться к последней рабочей версии файла или целой директории, имеется команда svn revert:
$ svn revert test.c Reverted 'test.c'
Возврат рабочей копии к последней копии на репозитории
Предположим, что один из разработчиков внес свои изменения, закомитил их, а после узнал, что его код, к примеру, выполняет уже имеющуюся функцию, причем, хуже. Тогда можно вернуться к нужной версии. Делается это так:
$ svn merge -r 7:6 test.c --- Reverse-merging r7 into 'test.c': U test.c
Возврат с ревизии 7 на ревизию 6
Еще можно быстро восстановить удаленные файлы и директории.
svn copy -m 'Undeleting test' https://svn.example.com/code/test@1263 https://svn.example.com/code/test
Восстановление копии из версии 1263
То есть, просмотрев лог, нужно определить, в какой ревизии файл был удален, а затем скопировать его из прошлой версии в новую. Конечно же, операцию необходимо закомитить.
Кроме всего прочего, SVN умеет объединять не только две ревизии, а целые диапазоны. Реализована функция весьма просто:
svn merge -r 255:284 /trunk/test/ includes/test/
Объединение директорий в includes/test/
Subversion имеет обширный инструментарий, который затрагивает большинство задач слежения за версиями. А изучение максимума из возможностей системы упростит процесс разработки и использования инструмента.
Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…