Работа с TortoiseSVN

Введение

В данном HOWTO будет подробно рассказано как работать с самым популярным SVN-клиентом под Windows: скачивать и обновлять репозитории, создавать теги и ветки проекта, коммитить (публиковать) свою рабочую копию, откатывать сделанные изменения и многое другое.

Где можно скачать программу

Скачать программу можно на её официальном сайте на странице Downloads: http://tortoisesvn.net/downloads. Там же можно скачать пакет локализации, содержащий помимо перевода интерфейса программы, ещё и словарь проверки орфографии (применяется при коммите изменений (см. ниже)).

Программа TortoiseSVN интегрируется в Проводник Windows (Windows Explorer) и все действия с ней выполняются из контекстного меню каталогов (папок).

Начнём с самого простого — скачивания одного из репозиториев на свой компьютер.

Скачивание репозитория SVN (Checkout)

Если Вы хотите скачать репозиторий какого-нибудь проекта, то Вы должны знать его URL, а также логин и пароль для доступа (если не указаны, то для анонимного доступа (только чтение) используется логин и пароль anonsvn). URL’ы могут быть:

  • стандартный svn:// — подключение напрямую к Subversion-серверу;
  • http:// — подключение к Subversion-серверу через веб (так работает большинство серверов, т.к. позволяет просматривать проект не имея SVN-клиента напрямую через веб-браузер);
  • https:// — то же, что и http://, но через SSL;
  • svn+ssh:// — svn через SSH (редко используется в настоящее время).

Допустим, что URL нам известен, поэтому чтобы скачать репозиторий, мы должны сделать следующее:

  1. Создаём папку, в которую будем скачивать репозитории (для удобства лучше хранить все репозитории в одной папке, например, C:\SVN).
  2. Заходим в неё в проводнике Windows, нажимаем правой кнопкой мыши по свободному месту и выбираем «SVN Checkout…«.
  3. В поле «URL of repository» пишем полный URL до репозитория SVN, который нам нужно скачать, а в поле «Checkout directory» корректируем путь, в которой будет помещена локальная копия. Внимание! Вам нужно делать checkout только каталога /trunk/ svn-репозитория, либо корневого, если /trunk/ не существует (очень редко, т.к. в 99% репозиториев trunk существует и содержит всегда самую последнюю версию файлов).
  4. В списке «Checkout Depth» укажите «Fully recursive«, что означает, что будет скачан весь репозиторий от указанного пути. Если установить флажок «Omit externals«, то внешние файлы, на которые есть ссылки в репозитории (например, из других репозиториев, либо репозиториев третьих лиц), скачаны не будут, поэтому ставить флажок здесь не рекомендуется.
  5. В блоке «Revision» Вы можете запросить выдать Вам последнюю версию репозитория: «HEAD revision» (рекомендуется именно этот вариант), либо указанную Вам в поле ревизию: «Revision ###» (не рекомендуется).
  6. Кнопка «Show log» покажет Вам список изменений в репозитории с информацией об авторах каждого изменения, описании изменений (если авторы их вводили при коммите изменений), а также списке добавленных, изменённых и удалённых файлов. Здесь же можно просмотреть чем файл одной ревизии (версии) отличается от файла другой, а также запросить показать унифицированный diff-файл изменений либо нескольких файлов, либо нескольких ревизий (отображается только для текстовых файлов). Более подробную информацию о Log Viewer читайте ниже.
  7. Нажимаем кнопку «OK» и ждём скачивания репозитория с Subversion-сервера (зависит от скорости Вашего Интернет-соединения, а также от загруженности svn-сервера). Внимание! Некоторые svn-серверы могут запросить пароль. Если Вы не знаете пароля, то вводите anonsvn как логин и пароль. Это стандартный логин/пароль для анонимного доступа. Если Вы хотите в дальнейшем публиковать свои изменения в этот репозиторий и у Вас есть на это право, то введите здесь свой логин и пароль.
  8. Готово. В каталоге, который Вы указали на третьем шаге в поле «Checkout directory» теперь находится локальная версия репозитория (рабочая копия).

Обновление скачанного репозитория (Update)

SVN и создавался для удобного управления проектам, а также поддержания их в актуальном состоянии, поэтому вторая по значимости операция — обновления скачанной рабочей копии. Рекомендуется как можно чаще обновлять свои рабочие копии. При обновлении скачиваются только изменённые файлы, добавляются новые и удаляются удалённые из репозитория файлы. Итак, чтобы обновить рабочую копию, нужно:

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
  2. Нажимаем правой кнопкой по свободному месту в папке, выбираем «SVN Update«.
  3. В открывшемся окне наблюдаем за процессом обновления: списком добавленных, изменённых и/или удалённых файлов, текущим номером версии. Здесь же можно нажать кнопку «Show log…» чтобы просмотреть список, прочитать описание изменений (если указано), сравнить текущую версию с предыдущей и т.д.
  4. Нажмите «OK» чтобы закрыть это окно. Репозитарий обновлён до последней версии.

Сохранение своих изменений в репозиторий (Commit)

Если Вы хотите внести свои изменения в скачанный репозиторий и у Вас есть на это право (право коммита в репозиторий), то просто начинайте работать с локальной рабочей копией как с обычной папкой: создавайте, редактируйте, удаляйте файлы и/или папки. Теперь чтобы внести изменения в репозиторий, нужно:

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows. Внимание! Рабочая копия должна быть скачана от логина пользователя, у которого есть право на коммит изменений (коммит-флаг).
  2. Нажимаем правой кнопкой по свободному месту в папке, выбираем «SVN Commit…«.
  3. В открывшемся окне «Commit» в секции «Message» вводим краткое описание своих изменений (это рекомендуется делать всегда, особенно если не Вы один работаете над проектом), но описание можно и оставить пустым (не рекомендуется, т.к. другие разработчики или пользователи не смогут понять что именно было изменено). В этом поле разрешено использовать буквы национальных алфавитов (присутствует полная поддержка юникода), но, к сожалению, некоторые веб-клиенты svn (отображающие в браузере список изменений) вместо русских букв отображают кракозябры. TortoiseSVN лишён этого недостатка.
  4. В секции «Changes made (double-click on file for diff)» Вы увидите список всех изменённых, добавленных и удалённых Вами файлов локальной рабочей копии. У изменённых файлов будут автоматически стоять флажки, у остальных — нет. Установите флажки у тех файлов, изменения которых должны быть загружены на svn-сервер (есть флажок — файл обновляется, добавляется, удаляется; нет флажка — остаётся без изменений). Двойной щелчок по файлу запустит утилиту Tortoise Merge (предназначена для сравнения версий файлов), которая покажет последнюю версию файла из репозитория SVN в левом окне и текущую рабочую копию в правом. Изменения будут выделены: удалённые строки зачёркнуты, добавленные выделены.
  5. После выделения нужных файлов или всех сразу («Select / deselect all«), нажмите кнопку «OK» и дождитесь окончания загрузки изменений на сервер. Будет открыто окно со списком добавленных, изменённых и/или удалённых файлов, а также указан текущий номер ревизии.

Работа с репозиторием напрямую на сервере

Иногда требуется работать с svn-репозиторием напрямую на сервере не скачивая его на локальный компьютер. Для этих целей существует утилита «SVN Repo-browser«, также входящая в состав TortoiseSVN. Работать с ней очень просто:

  1. Запускаем проводник Windows, заходим в любую папку, нажимаем правой кнопкой по свободному месту и выбираем «SVN Repo-browser«.
  2. В открывшемся окне «URL» вводим полный URL нужного нам svn-репозитория и нажимаем «OK«.
  3. Будет открыто главное окно утилиты: «%URL% — Repository Browser«, где %URL% — URL репозитория. Работать в этом окне можно так же, как в Проводнике Windows. Разрешено перетаскивание объектов (Drag and Drop). Через контекстное меню файла/папки можно:
    • удалять «Delete…«, переименовывать «Rename» файлы и каталоги (папки);
    • добавить файл («Add file…«) или папку («Add folder…«) в репозиторий;
    • создать пустую папку («Create folder«) в репозитории;
    • скачать («Checkout…«) репозиторий (см. выше);
    • извлечь файл или папку из репозитория без служебных каталогов («Export…«). Извлечённая папка отличается от рабочей копии тем, что её нельзя обновлять и она не содержит служебных скрытых каталогов .svn;
    • создать ветку или тег («Copy to…«);
    • изменять свойства файла или папки («Show properties«).
  4. Любое изменение требует ввести текст комментария (разрешается не вводить и оставить поле пустым) и увеличивает номер ревизии на единицу. Изменения применяются немедленно.
  5. Нажмите кнопку «OK» для выхода из Repository Browser.

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

Если Вы работаете над большим проектом, то желательно для каждой публичной стабильной версии (1.0, 1.1, 2.0 и т.д.) создавать отдельный тег, например, /tags/RELEASE-Mj.Mn, где Mj — Major-версия, а Mn — Minor-версия проекта. Пример: /tags/RELEASE-1.0 (для версии 1.0), /tags/RELEASE-2.63 (для версии 2.63) и т.д. Внимание! Теги создаются НЕ в каталоге /trunk/, а выше него на один уровень! Чтобы создать метку или ветвление, нужно (у Вас должно быть право коммита в репозиторий для создания меток или ветвлений):

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
  2. Нажимаем правой кнопкой по свободному месту и выбираем «TortoiseSVN» — «Branch/tag…«.
  3. В открывшемся окне в поле «To URL» введите полный URL с путём до нового тега. Пример: http://ваш_проект.svn.sourceforge.net/tags/RELEASE-1.0 (это только пример; пути должны указывать на Ваш проект).
  4. В секции «Create copy in the repository from» укажите «HEAD revision in the repository» (последняя ревизия; рекомендуется), либо укажите номер ревизии вручную, выбрав «Specific revision in the repository ###«, либо создайте тег из текущей рабочей копии «Working copy» (не рекомендуется).
  5. В секции «Log message» укажите комментарий к ревизии (например, %НАЗВАНИЕ_ПРОЕКТА% %ВЕРСИЯ_ПРОЕКТА% Released).
  6. Нажмите «OK«. Флажок в строке «Switch working copy to new branch/tag» ставить не рекомендуется, т.к. это переключит Вашу текущую рабочую копию на новый путь, что может привести к различным ошибкам и проблемам.

Откат изменений в рабочей копии

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

  1. Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
  2. Нажимаем правой кнопкой по свободному месту и выбираем «TortoiseSVN» — «Revert…«.
  3. В открывшемся окне Вы увидите список всех изменённых файлов Вашей рабочей копии. Установите флажок у того файла, который Вы хотите откатить до версии из репозитория, либо выберите сразу все файлы («Select / deselect all«). Двойной щелчок по файлу покажет его отличия от оригинального файла.
  4. Нажмите «OK«. Выбранные файлы будут восстановлены, а изменённые будут отправлены в Корзину Windows.

Работа с утилитой Log Viewer

Утилита Log Viewer, запускаемая после нажатия на кнопку «Show log…«, либо при нажатии правой кнопкой по свободному месту в локальной рабочей копии — «TortoiseSVN» — «Show log«. По умолчанию утилита показывает последние 50 ревизий и их описаний (если во время коммита они были введены). Все основные действия выполняются из контекстного меню ревизии:

  • «Compare with woking copy» — сравнить текущую (выделенную) ревизию с локальной рабочей копией. Список изменений будет показан в Tortoise Merge.
  • «Show changes as unified diff» — показать изменения выделенных ревизий как унифицированный патч-файл (unified diff). Если выделена только одна ревизия, то она будет сравниваться с предыдущей (например, выделена ревизия 87, она будет сравниваться с 86).
  • «Compare with previous revision» — показать изменения выделенной и предыдующей ревизии. Будет отображено окно с различающимися файлами, двойной щелчок по файлу откроет его в Tortoise Merge для просмотра изменений.
  • «Compare and blame with previous revision» — то же, что и предыдущее, но здесь отображается кто и когда внёс какое-либо изменение в файл построчно.
  • «Browse repository» — открывает описанный выше Repository Browser для прямой работы с репозиторием.
  • «Create branch/tag from revision» — позволяет создать ветку или тег из выделенной ревизии (см. выше).
  • «Update item to revision» — обновляет до выделенной ревизии.
  • «Revert to this revision» — позволяет откатиться до выделенной ревизии.
  • «Revert changes from this revision» — позволяет откатить все изменения, сделанные в выделенной ревизии.
  • «Merge revisions to…» — позволяет объединить несколько ревизий в рабочую копию.
  • «Checkout…» — скачать выделенную ревизию (см. выше).
  • «Export…» — извлечь выделенную ревизию без служебных каталогов.
  • «Edit author» — редактировать имя автора выделенной ревизии (нужны права администратора).
  • «Edit log message» — позволяет редактировать текст описания выделенной ревизии (нужны права администратора).
  • «Show revision properties» — показать свойства выделенной ревизии.
  • «Copy to clipboard» — скопировать номер выделенной ревизии, автора, описание и список изменённых файлов в буфер обмена Windows.
  • «Search log messages» — запустить поиск в описаниях ревизий.

Кнопка «Show all» покажет все ревизии, а «Show range…» позволит задать диапазон ревизий, которые будут отображаться в окне Log Viewer.

Кнопка «Statistics» отображает различную статистическую информацию: наиболее активный и наименее активный автор, количество изменений в репозитории в неделю, общее количество изменений и т.д.

Читать далее →