Apache Subversion: быстрый старт

подготовлено редакций сайта

Linux

apt-get install subversion

Mac

brew options subversion

Windows

Скачивание с сайта

Установите клиент SVN , чтобы начать совместную работу над проектом, использующим Subversion в качестве системы контроля версий. Чтобы установить клиентскую программу, вы можете собрать ее самостоятельно из исходного кода или загрузить бинарный пакет. Список сайтов, где вы можете получить готовый клиент Subversion, доступен на официальной странице бинарных пакетов . Если вы хотите скомпилировать программное обеспечение самостоятельно, возьмите исходный код на странице Исходный код . Сразу после установки клиента вы сможете протестировать его, выполнив команду svn. Вы должны увидеть следующий вывод:

Теперь вы можете начать использовать клиент командной строки для взаимодействия с удаленным репозиторием.

Если у вас возникнут какие-то трудности с Subversion, вам может быть лучше подойдет графический клиент. Мы не ведем список таких клиентов; вместо этого мы рекомендуем вам выполнить веб-поиск Subversion GUI client.

Терминология

Репозиторий — это база данных управления версиями, которая часто находится на сервере и обычно предоставляется либо Apache HTTP Server (через модуль mod_dav_svn ), либо сервером svnserve. Репозиторий действует как единый источник истины и — как центральное хранилище — содержит полную историю изменений версионных данных в виде ревизий.

Примеры URL-адресов репозитория:
  • HTTP-сервер Apache: https://svn.example.com/ repos/MyRepo/MyProject/trunk
  • svnserve: svn://svn.example.com/ repos/MyRepo/MyProject/ branches/MyBranch
  • Прямой доступ (в стиле Unix): file:///var/svn/repos /MyRepo/MyProject/tags/1.1.0
  • Прямой доступ (в стиле Windows): file:///C:/Repositories/ MyRepo/trunk/ MyProject
Что такое рабочая копия?

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

Рабочая копия содержит данные вашего проекта и выглядит и действует как обычный каталог в вашей локальной файловой системе, но с одним важным отличием — рабочая копия отслеживает статус и изменения файлов и каталогов внутри. Вы можете думать о рабочей копии как об обычном каталоге с возможностями управления версиями. Рабочая копия имеет административный каталог с именем .svn в своем корне. Административный каталог содержит метаданные, необходимые Subversion для управления возможностями управления версиями.

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

Основные задачи

Импорт данных в репозиторий

Если вы хотите импортировать существующие неверсионные данные в репозиторий SVN, вам следует выполнить команду svn import . Вот пример:

Проверка рабочей копии

Чтобы начать вносить изменения в данные вашего проекта, вам нужно создать локальную копию версионированного проекта. Вы можете использовать клиент командной строки svn или любой клиент на основе графического интерфейса, который вы предпочитаете. Ваша локальная копия проекта называется рабочей копией, и вы создаете ее, выполнив команду svn checkout . Вот пример:

В результате вы получите рабочую копию ствола проекта с именем MyProject, который находится в репозитории MyRepo. Рабочая копия будет расположена в каталоге MyWorkingCopy на вашем компьютере. Обратите внимание, что вместо того, чтобы выписывать ствол, вы можете выписывать некоторую ветку или тег (предполагая, что они уже существуют в репозитории).

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

Обновление рабочей копии

Вы не единственный человек, работающий над проектом, верно? Это значит, что ваши коллеги также вносят изменения в данные проекта. Чтобы оставаться в курсе и получать изменения, внесенные другими, вам следует запустить команду svn update в вашей рабочей копии. В результате ваша рабочая копия синхронизируется с репозиторием и загрузит изменения, внесенные вашими коллегами. Рекомендуется обновить рабочую копию перед внесением локальных изменений в репозиторий.

Внесение изменений в локальную рабочую копию

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

Изменение существующих файлов

Измените файлы так, как вы это обычно делаете, используя ваш любимый текстовый редактор, графический редактор, программное обеспечение для редактирования звука, IDE и т. д. Как только вы сохраните изменения на диск, Subversion автоматически распознает их.

Фиксация изменений в репозитории

Чтобы опубликовать изменения, внесенные в рабочую копию, необходимо выполнить команду svn commit.

Просмотрите свои изменения перед фиксацией! Используйте команды svn status и svn diff для просмотра изменений.

Пример команды фиксации

Обратите внимание на опцию -m (--message) . Всегда следует включать описательное сообщение журнала коммита. Это должно помочь другим, включая вас, понять причину, по которой вы сделали этот коммит. Также хорошей идеей будет включить в сообщение журнала сводку ваших изменений.

Выполнение операций с файлами и каталогами

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

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

Добавление новых файлов и каталогов

Поместите новые файлы или каталоги в рабочую копию, и Subversion увидит их как «неверсированные». Он не начнет автоматически отслеживать новые файлы, пока вы не выполните команду svn add :

Перемещение и переименование файлов и каталогов

Перемещайте и переименовывайте файлы и каталоги с помощью команд svn move или svn rename :

Команда svn rename является псевдонимом для svn move .

Копирование файлов и каталогов

Скопируйте файлы и каталоги с помощью команды svn copy :

Удаление файлов и каталогов

Удалите файлы и каталоги с помощью команды svn delete svn delete :

Отмена или отмена локальных изменений

Отмените локальные незафиксированные изменения с помощью команды svn revert :

Отмененные неподтвержденные изменения будут утеряны навсегда. Вы не сможете восстановить отмененные изменения. Используйте svn revert с осторожностью!
Ветвление и маркировка

Для создания веток и тегов следует использовать команду svn copy . Это та же команда, которая используется для копирования элементов в рабочей копии и в репозитории, когда вы хотите, чтобы они были исторически связаны.

Команда svn copy используется для ветвления, поскольку технически ветвь является копией источника, из которого вы копируете. Однако это не обычная копия, с которой вы знакомы при копировании файлов в локальной файловой системе. Ветви в репозиториях Subversion — это так называемые «дешевые копии» , которые похожи на символические ссылки. Поэтому создание новой ветки занимает минимальное время и практически не занимает места в репозитории Subversion. Вы можете создавать ветви и использовать их для любых изменений, независимо от размера и области действия изменения.

Создание ветки с помощью прямого копирования URL-адреса в URL-адрес

Ветвление в Subversion простое. В простейшей форме создание новой ветки требует от вас выполнения команды для URL-адресов удаленного репозитория. Например, давайте создадим новую ветку из основного ствола:

Настройка локального репозитория

Вы можете создать репозиторий Subversion на своем компьютере и использовать схему file:// для локального взаимодействия с ним. Такой подход может помочь вам использовать Subversion локально для отслеживания личных файлов и проектов одного человека.

Следующая процедура создает минимальную среду для существующего проекта. Она преобразует каталог с проектом в рабочую копию недавно созданного локального репозитория Subversion. В результате вы можете изменять файлы в рабочей копии и отслеживать изменения в локальном репозитории.

programmers

В Unix-системах:

  1. Создайте родительский каталог .svnrepos , в котором вы разместите свои репозитории SVN:
  2. Создайте новый репозиторий MyRepo в .svnrepos :
  3. Создайте рекомендуемый макет проекта в новом репозитории:
  4. Измените каталог на ./MyProject , где находится ваш неверсированный проект:
  5. Преобразовать текущий каталог в рабочую копию trunk/ в репозитории:
  6. Запланируйте добавление файлов вашего проекта в репозиторий:
  7. Зафиксируйте файлы проекта:
  8. Обновите рабочую копию:

В Windows:

  1. Создайте родительский каталог C:\Repositories , в котором вы разместите свои репозитории SVN:
  2. Создайте новый репозиторий MyRepo в C:\Repositories :
  3. Создайте рекомендуемый макет проекта в новом репозитории:
  4. Измените каталог на C:\MyProject , где находится ваш неверсированный проект:
  5. Преобразовать текущий каталог в рабочую копию trunk/ в репозитории:
  6. Запланируйте добавление файлов вашего проекта в репозиторий:
  7. Зафиксируйте файлы проекта:
  8. Обновите рабочую копию:

Как рабочие копии отслеживают хранилище

В служебной папке .svn/ для каждого файла рабочей папки Subversion записывает информацию о двух важнейших свойствах:

  • На какой ревизии основан ваш рабочий файл (это называется рабочая ревизия файла)
  • Дату и время, когда локальная копия последний раз обновлялась из хранилища.
programmers

Основываясь на этой информации, и взаимодействуя с хранилищем, Subversion может сказать, в каком из следующих четырех состояний находится рабочий файл:

  • Не изменялся и не устарел. Файл не изменялся в рабочей папке, и в хранилище не фиксировались изменения этого файла со времени его рабочей ревизии. Команды фиксировать (commit) и обновить (update) ничего делать не будут.
  • Изменён локально и не устарел. Файл был изменён в рабочей папке, и в хранилище не фиксировались изменения этого файла со времени его базовой ревизии. Существующие локальные изменения не были зафиксированы в хранилище, поэтому команда фиксировать (commit) для файла преуспеет в опубликовании ваших изменений, а команда обновить (update) ничего делать не будет.
  • Не изменялся и устарел. Файл в рабочей папке не изменялся, но был изменён в хранилище. Со временем, файл должен быть обновлён для соответствия текущей публичной ревизии. Команда фиксировать (commit) ничего делать не будет, а команда обновить (update) внесёт последние изменения в вашу рабочую копию.
  • Изменён локально и устарел. Файл был изменён как в рабочей папке, так и в хранилище. Команда фиксировать (commit) потерпит неудачу с ошибкой устарел (out-of-date). Файл необходимо сначала обновить; команда обновить (update) попытается объединить опубликованные изменения с локальными. Если Subversion не сможет выполнить объединение в приемлемой форме самостоятельно, то заботу о разрешении конфликта она оставит пользователю.