Команда svn update из командной строки. SVN централизованная система управления версиями

Introduction

The help function of Subversion (svn help ) provides a summary of the available commands. More detailed information is available from the Subversion on-line book available at http://svnbook.red-bean.com/en/1.2/index.html . Chapter 3 is especially helpful.

The following is a basic set of commands which all editors will use frequently. Some commands have two forms, the long and the short. Both are listed in the description.

svn diff . This is useful for two different purposes. First, those without write access to the BLFS SVN server can use it to generate patches to send to the BLFS-Dev mailing list. To do this, simply edit the files in your local sand box then run svn diff > FILE.patch from the root of your BLFS directory. You can then attach this file to a message to the BLFS-Dev mailing list where someone with editing rights can pick it up and apply it to the book. The second use is to find out what has changed between two revisions using: svn diff -r revision1:revision2 FILENAME . For example: svn diff -r 168:169 index.xml will output a diff showing the changes between revisions 168 and 169 of index.xml .

Данный цикл статей посвящен введению в использование SVN , с точки зрения обычного пользователя. Статья была написана в помощь моим коллегам для быстрого освоения и использования SVN . Итак начнем с азов.

Введение

Subversion (SVN ) — бесплатная система управления версиями с открытым исходным кодом. SVN позволяет управлять файлами и каталогами, а так же сделанными в них изменениями во времени. SVN предоставляет следующие возможности:

  1. Контроль изменений каталогов. SVN использует «виртуальную» файловую систему с возможностями управления версиями, которая способна отслеживать изменения во времени целых структур каталогов
  2. Настоящая история версий. SVN делает возможным добавление, удаление, копирование и переименование как файлов, так и каталогов. При этом каждый вновь добавленный файл начинает жизнь с чистого листа, сохраняя собственную историю изменений
  3. Атомарная фиксация изменений. Каждый набор изменений либо попадает в хранилище целиком, либо не попадает туда вовсе. Т.е. если при фиксации изменений проекта произошла ошибка при обработке файла, то изменения всего проекта не будут зафиксированы
  4. Метаданные с версиями. Каждый файл и каталог имеет собственный набор свойств, представленных в виде названия и значения. Вы можете создавать и сохранять любые необходимые пары названий свойств и их значений. Свойства файлов точно так же находятся под управлением версиями, как их содержимое
  5. Единый способ работы с данными. SVN обнаруживает различия между файлами с помощью специального бинарного алгоритма, который одинаково работает как с текстовыми, так и с бинарными файлами. Файлы записываются в хранилище в сжатом виде независимо от их типа, а различия между отдельными версиями могут передаваться по сети в обоих направлениях
  6. Эффективные ветки и метки. SVN создаёт ветки и метки путём простого копирования проекта, используя механизм, похожий на жёсткие ссылки в файловых системах. Благодаря этому, операции по созданию веток и меток занимают немного времени.


Список основных терминов

  1. Репозиторий (repository ) — централизованное хранилище исходных кодов, рабочих материалов и документации. Любое количество клиентов подключается к хранилищу и читает или записывает эти файлы
  2. Рабочая копия /working copy (WC) — обычное дерево каталогов на компьютере, содержащие набор файлов для работы над проектом. Изменения в рабочей копии не доступны для других пользователей репозитория, до тех пор пока они не будут зафиксированы.
  3. Trunk — основное направление разработки
  4. Branch (""Ветка"") - направление разработки, которое существует независимо от другого направления, но имеет с ним общую историю. Ветка всегда берет начало как копия чего-либо и движется от этой точки, создавая свою собственную историю
  5. Tag (""Метка"") — выделенная явно, через создание отдельной папки версия файлов проекта в определенный момент времени.
  6. Revision — номер ревизии репозитория, в пределах репозитория номер ревизии уникальная величина
  7. Checkout - команда, которая выполняет начальное получение проекта из репозитория в WC.
  8. Commit - команда, которая выполняет фиксацию изменений файлов проекта в WC в Репозиторий.
  9. Update - команда, которая выполняет обновление файлов проекта в WC из репозитория
  10. Revert - команда, которая выполняет отмену любых изменений в файлах проекта в WC на основе номера ревизии репозитория.
  11. Merge - команда, которая выполняет слияние файлов из разных веток проекта и помещает результат слияния в WC.
  12. Conflict - ситуация, возникающая при фиксации изменений, когда одни и те же файлы изменяли несколько разработчиков.
  13. Resolve - набор правил по разрешению возникающих конфликтов.
  14. Import - команда, для быстрого копирования дерева файлов в Репозиторий.
  15. Export - команда, для экспорта проекта, отличается от checkout тем, что не создает в папках проекта служебную информацию.
  16. Switch - команда, которая выполняет переключение WC на другую ветку разработки.
  17. Create , Add , Delete , Copy , Move , Rename - команды для управления файлами и папками в репозитории или WC.

Программное обеспечение

Работа с репозиторием SVN рассмотрена на основе программного обеспечения TortoiseSVN

Извлечь

Svn checkout [-depth ARG] [--ignore-externals] [-r rev] URL ПУТЬ

Если помечен флажок Пропустить внешние

Если вы извлекаете конкретную ревизию, укажите её после URL при помощи параметра -r .

Обновить

Svn info URL_рабочей_копии svn update [-r rev] ПУТЬ

Обновление нескольких элементов в данный момент не является атомарной операцией в Subversion. Поэтому TortoiseSVN сначала находит ведущую ревизию (HEAD) в хранилище, а затем обновляет все элементы до этой ревизии во избежание создания рабочей копии со смешанными ревизиями.

Если для обновления выбран только один элемент, или выбранные элементы не все из одного и того же хранилища, TortoiseSVN просто обновляет до ведущей ревизии.

Здесь параметры командной строки не используются. Обновить до ревизии также реализует команду обновления, но предлагает больше возможностей.

Обновить до ревизии

Svn info URL_рабочей_копии svn update [-r rev] [-depth ARG] [--ignore-externals] ПУТЬ

The depth combo box items relate to the -depth argument.

Если помечен флажок Пропустить внешние , используйте параметр --ignore-externals .

Фиксировать

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

Svn status -v ПУТЬ

Если отмечен флажок

Если вы отметите какие-либо неверсированные файлы и папки, эти элементы сначала будут добавлены к вашей рабочей копии.

Svn add ПУТЬ...

Когда вы нажимаете на ОК, Subversion начинает выполнение фиксации. Если вы оставили все флажки, отмечающие файлы, в состоянии по умолчанию, TortoiseSVN использует одну рекурсивную фиксацию рабочей копии. Если вы сняли пометки с некоторых файлов, тогда должна использоваться нерекурсивная фиксация (-N), и каждый путь должен быть указан индивидуально в командной строке для фиксации.

Svn commit -m "LogMessage" [-depth ARG] [--no-unlock] ПУТЬ...

СообщениеЖурнала здесь представляет собой содержимое поля ввода сообщения журнала. Оно может быть пустым.

Различие

Svn diff ПУТЬ

Если вы используете команду "Различия" из главного контекстного меню, вы сравниваете изменённый файл с его базовой ревизией. Вывод из ИКС вышеприведенной команды тоже это выполняет и производит выдачу в формате объединённых различий. Однако, TortoiseSVN это не использует. TortoiseSVN применяет TortoiseMerge (или программу сравнения по вашему выбору) для наглядного отображения различий между текстовыми файлами, поэтому прямого эквивалента ИКС нет.

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

Журнал

Svn log -v -r 0:N --limit 100 [--stop-on-copy] ПУТЬ или svn log -v -r M:N [--stop-on-copy] ПУТЬ

По умолчанию, TortoiseSVN пытается извлечь 100 сообщений журнала, используя метод --limit. Если установки заставляют использовать старые API, тогда для получения сообщений журнала для 100 ревизий из хранилища используется вторая форма.

Если отмечен флажок Остановиться на копировании/переименовании , используйте параметр --stop-on-copy .

Проверка на наличие изменений

Svn status -v ПУТЬ или svn status -u -v ПУТЬ

Начальная проверка статуса смотрит только на вашу рабочую копию. Если вы нажмёте на Проверить хранилище , тогда проверяется также и хранилище, чтобы посмотреть, какие файлы будут изменены при обновлении, и это требует параметра -u .

Если отмечен флажок Показать неверсированные файлы , TortoiseSVN также будет показывать неверсированные файлы и папки в иерархии рабочей копии, учитывая правила игнорирования. Конкретно это свойство не имеет прямого эквивалента в Subversion, поскольку команда svn status не заходит в неверсированные папки.

Граф ревизий

Граф ревизий - это возможность, предоставляемая только TortoiseSVN. Аналога в клиенте командной строки нет.

Что TortoiseSVN при этом делает:

Svn info URL_рабочей_копии svn log -v URL

где URL - это корень хранилища, и затем анализирует возвращённые данные.

Обозреватель хранилища

Svn info URL_рабочей_копии svn list [-r rev] -v URL

Вы можете использовать svn info для определения корня хранилища: это верхний уровень, отображаемый в обозревателе хранилища. Вы не можете перемещаться выше этого уровня. Также, эта команда возвращает всю информацию о блокировках, отображаемую в обозревателе хранилища.

Вызов svn list покажет список содержимого папки, для указанного URL и ревизии.

Редактировать конфликты

Эта команда не имеет эквивалента в ИКС. Она вызывает TortoiseMerge или внешний инструмент трёхстороннего различия/слияния для просмотра файлов, вовлечённых в конфликт и отбора строк, которые должны быть использованы.

Улажено

Svn resolved ПУТЬ

Переименовать

Svn rename ТЕКУЩИЙ_ПУТЬ НОВЫЙ_ПУТЬ

Удалить

Svn delete ПУТЬ

Убрать изменения

Svn status -v ПУТЬ

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

Когда вы нажмёте на ОК, Subversion уберёт изменения. Если вы оставили все флажки выбора файлов в состоянии по умолчанию, TortoiseSVN использует одиночную рекурсивную (-R) отмену изменений в рабочей копии. Если вы снимете пометки с некоторых файлов, тогда каждый путь должен быть указан индивидуально в командной строке для удаления изменений.

Svn revert [-R] ПУТЬ...

Очистка

Svn cleanup ПУТЬ

Заблокировать

Svn status -v ПУТЬ

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

Svn lock -m "LockMessage" [--force] ПУТЬ...

СообщениеБлокировки представляет собой содержимое поля сообщения блокировки. Оно может быть пустым.

Если отмечен флажок Перехватить блокировки , используйте параметр --force .

Снятие блокировки

Svn unlock ПУТЬ

Ответвление/Метка

Svn copy -m "СообщениеЖурнала" URL URL или svn copy -m "СообщениеЖурнала" или svn copy -m "СообщениеЖурнала" ПУТЬ URL

Диалог Ответвление/Метка выполняет копирование в хранилище. Есть 3 переключаемые кнопки:

  • Ведущая ревизия в хранилище (HEAD)
  • Указанной ревизии в хранилище
  • Рабочая копия

которые соответствуют трем вышеприведённым вариантам командной строки.

add – Добавляет файлы, директории и символические связи, помечая их для последующего внесения в хранилище. Будучи помеченными, они закачиваются и добавляются в хранилище при первом же закреплении изменений. Если вы что-то добавили, но потом передумали до закрепления, то снять метку добавления можно подкомандой svn revert.
svn add PATH…
$ svn add testdir

blame (praise, annotate, ann) – Построчно показывает автора и редакцию для указанных файлов или URL-ов. Каждая строка текста начинается с имени автора (имени пользователя) и номера редакции. Таким образом указывается кто и когда изменял эту строку последний раз.
svn blame TARGET[@REV]…
$ svn blame http://svn.red-bean.com/repos/test/readme.txt

cat – Выводит содержимое указанных файлов или URL-ов. Для перечисления содержимого каталогов используйте svn list.
svn cat TARGET[@REV]…
$ svn cat http://svn.red-bean.com/repos/test/readme.txt

checkout (co) – Создает рабочую копию на основе данных в хранилище. Если PATH пропущен, базовое имя URL будет использоваться в качестве имени для каталога рабочей копии. Если задано несколько URL, соответствующие копии будут создаваться в подкаталоге PATH, каждая в своем каталоге образованом из базового имени URL.
svn checkout URL[@REV]…
svn checkout svn://svn.ru2web.ru/ru2web/branches/www-01/ /usr/home/vasia/ru2web.ru/app/

cleanup – Рекурсивно чистит рабочую копию, удаляя блокировки оставшиеся от незавершенных операций. Как только столкнетесь с ошибкой «рабочая копия заблокирована», запустите эту подкоманду для удаления старых блокировок и приведения рабочей копии в работоспособное состояние.

Если по некоторым причинам операция по команде svn update провалилась из-за проблем с запущенным внешней программой различий (например, что-то не то в ней нажал или произошел сбой сети), нужно задать параметр –diff3-cmd чтобы дать возможность при чистке копии завершить все объединяния используя внешнюю программу различий. Вы также можете указать конфигурационный каталог посредством параметра –config-dir, но постарайтесь не злоупотреблять этими параметрами.

commit (ci) – Посылает сделанные вами изменения рабочей копии в хранилище для их сохранения в нем. Если вы не воспользовались ни –file, ни –message параметром, svn запустит внешний редактор для составления комментария. Прочтите описание параметра editor-cmd в «Config».
svn commit вышлет храшилищу все рекурсивно найденные метки блокировок и разблокирует соответсвующие этим меткам ресурсы, если не был указан параметр –no-unlock. «Район поиска» задается указанием PATH.
svn commit

copy (cp) – Копирует файл в рабочей копии или в хранилище. SRC и DST могут быть путями как внутри рабочей копии, так и URL внутри хранилища.
svn copy SRC DST

delete (del, remove, rm) – Удаление элемента из рабочей копии или репозитория.
svn delete PATH…
svn delete URL…

diff (di) – Показывает различия между рабочей копией и репозиторием.
$ svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS@3000 http://svn.collab.net/repos/svn/trunk/COMMITTERS@3500

export – Экспорт чистого дерева каталогов (без.svn папок).

help (?, h) – Помощь.

import – Фиксация неверсированного файла или дерева в хранилище.
svn import URL

info – Отображение информации о локальном или удаленном элементе.
svn info

list (ls) – Список каталогов в хранилище.
svn list …]
$ svn list http://svn.red-bean.com/repos/test/support

lock – Блокировка рабочей копии в хранилище, так что никакой другой пользователь не может вносить изменения в данному пути.
svn lock TARGET…
$ svn lock tree.jpg house.jpg

log – Показать сообщения журнала.
svn log
svn log URL
$ svn log

merge – Применить различия между двумя источниками.
$ svn merge -r 250:HEAD http://svn.red-bean.com/repos/branches/my-branch

mkdir – Создать каталог в хранилище с контролем версий.
$ svn mkdir newdir

move (mv, rename, ren) – Перемещение файла или директории.
svn move SRC DST

propdel (pdel, pd) – Удаление свойств из файлов, каталогов или ревизий.
svn propdel PROPNAME
svn propdel PROPNAME –revprop -r REV

propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)

resolved – Удалить «конфликты» на рабочую копию файлов или каталогов.
svn resolved PATH…

revert – Отменить все локальные изменения.
$ svn revert myprj.phtml

status (stat, st) – Статус рабочей копии файлов или каталогов.
$ svn status wc

switch (sw) – Обновление рабочей копии на другой URL.

unlock – Разблокировка рабочей копии.

update (up) – Обновление вашей рабочей копии.

Subversion (SVN - Concurrent Versions System) - централизованная система управления версиями. Разработана в качестве замены для CVS , имеет тот-же функционал, однако лишена многих ее недостатков. Смотри так-же: SVN book .

Настройка SVN сервера

SVN репозитарий, довольно просто, в данном примере, директория, /home/svn/ , должна существовать: # svnadmin create --fs-type fsfs /home/svn/project1 Подключиться к репозитарию можно следующими способами:

  • file:// - Прямой доступ через файловую систему с помощью SVN клиента. В локальной файловой системе должны быть корректно настроены привилегии.
  • svn:// или svn+ssh:// - Удаленный доступ к SVN серверу (так-же по протоколу SSH ). Требуются права в локальной файловой системе, порт по-умолчанию: 2690/tcp .
  • http:// Удаленный доступ через webdav , используя apache . Для данного метода не требуется наличие локальных пользователей.
Импорт и проверка существующего проекта через локальную файловую систему. В рабочую директорию заходить не обязательно, можно просто указать полный путь: # svn import /project1/ file:///home/svn/project1/trunk -m "Initial import" # svn checkout file:///home/svn/project1

Удаленный доступ по протоколу SSH

Удаленный доступ по протоколу SSH не требует каких-то доаолнительных настроек, просто замените file:// на svn+ssh/hostname . Например: # svn checkout svn+ssh://hostname/home/svn/project1 Как и в случае локального доступа, пользователь должен иметь аккаунт, для доступа по протоколу SSH на сервер, и корректно настроенные права на чтение/запись. Данный метод может быть пригоден для небольших групп пользователей, пользователи входящие в группу, являются владельцами хранилища, например: # groupadd subversion # groupmod -A user1 subversion # chown -R root:subversion /home/svn # chmod -R 770 /home/svn

Удаленный доступ через HTTP(apache)

Удаленный доступ черз HTTP (HTTPS ), подходящее решение для удаленных групп пользователей. Этот метод использует авторизацию веб сервера Apache (не локальные аккаунты). Вот типичная конфигурация : LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so # Только для контроля доступа DAV svn # URL "/svn/foo" будет отображен на путь репозитария /home/svn/foo SVNParentPath /home/svn AuthType Basic AuthName "Subversion repository" AuthzSVNAccessFile /etc/apache2/svn.acl AuthUserFile /etc/apache2/svn-passwd Require valid-user Сервер Apache должен иметь полный доступ к репозитарию: # chown -R www:www /home/svn Создание пользователя с помощью htpasswd : # htpasswd -c /etc/svn-passwd user1 # -c Создать файл

Контроль доступа svn.acl, пример

# По-умолчанию доступ на чтение. "* =" по-умолчанию не будет иметь доступа [/] * = r project1-developers = joe, jack, jane # Дать права на запись разработчикам @project1-developers = rw

Некоторые команды для управления SVN репозитарием

Смотрите так-же Subversion Quick Reference Card . Tortoise SVN , неплохой Windows интерфейс.

Импорт

Импортировать в репозитарий новый проект, содержащий директории и файлы, можно с помощью команды import . Эта-же команда используется и для добавления директории с ее содержимым в уже существующий проект. # svn help import # Помощь по команде # Добавить новую директорию и ее содержимое в директорию src, проекта project1. # svn import /project1/newdir http://host.url/svn/project1/trunk/src -m "add newdir"

Типичные команды SVN

# svn co http://host.url/svn/project1/trunk # Оформить заказ на последнюю версию # Тэги и ветки создаются с помощью копирования # svn mkdir http://host.url/svn/project1/tags/ # Создать директорию tags # svn copy -m "Tag rc1 rel." http://host.url/svn/project1/trunk \ http://host.url/svn/project1/tags/1.0rc1 # svn status [--verbose] # Проверить состояние файлов в рабочей директории # svn add src/file.h src/file.cpp # Добавить два файла # svn commit -m "Added new class file" # Передать изменения сообщением # svn ls http://host.url/svn/project1/tags/ # Список всех тэгов # svn move foo.c bar.c # Переместить (переименовать) файлы # svn delete some_old_file # Удалить файлы