Введение
В данном 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 нам известен, поэтому чтобы скачать репозиторий, мы должны сделать следующее:
- Создаём папку, в которую будем скачивать репозитории (для удобства лучше хранить все репозитории в одной папке, например, C:\SVN).
- Заходим в неё в проводнике Windows, нажимаем правой кнопкой мыши по свободному месту и выбираем «SVN Checkout…«.
- В поле «URL of repository» пишем полный URL до репозитория SVN, который нам нужно скачать, а в поле «Checkout directory» корректируем путь, в которой будет помещена локальная копия. Внимание! Вам нужно делать checkout только каталога /trunk/ svn-репозитория, либо корневого, если /trunk/ не существует (очень редко, т.к. в 99% репозиториев trunk существует и содержит всегда самую последнюю версию файлов).
- В списке «Checkout Depth» укажите «Fully recursive«, что означает, что будет скачан весь репозиторий от указанного пути. Если установить флажок «Omit externals«, то внешние файлы, на которые есть ссылки в репозитории (например, из других репозиториев, либо репозиториев третьих лиц), скачаны не будут, поэтому ставить флажок здесь не рекомендуется.
- В блоке «Revision» Вы можете запросить выдать Вам последнюю версию репозитория: «HEAD revision» (рекомендуется именно этот вариант), либо указанную Вам в поле ревизию: «Revision ###» (не рекомендуется).
- Кнопка «Show log» покажет Вам список изменений в репозитории с информацией об авторах каждого изменения, описании изменений (если авторы их вводили при коммите изменений), а также списке добавленных, изменённых и удалённых файлов. Здесь же можно просмотреть чем файл одной ревизии (версии) отличается от файла другой, а также запросить показать унифицированный diff-файл изменений либо нескольких файлов, либо нескольких ревизий (отображается только для текстовых файлов). Более подробную информацию о Log Viewer читайте ниже.
- Нажимаем кнопку «OK» и ждём скачивания репозитория с Subversion-сервера (зависит от скорости Вашего Интернет-соединения, а также от загруженности svn-сервера). Внимание! Некоторые svn-серверы могут запросить пароль. Если Вы не знаете пароля, то вводите anonsvn как логин и пароль. Это стандартный логин/пароль для анонимного доступа. Если Вы хотите в дальнейшем публиковать свои изменения в этот репозиторий и у Вас есть на это право, то введите здесь свой логин и пароль.
- Готово. В каталоге, который Вы указали на третьем шаге в поле «Checkout directory» теперь находится локальная версия репозитория (рабочая копия).
Обновление скачанного репозитория (Update)
SVN и создавался для удобного управления проектам, а также поддержания их в актуальном состоянии, поэтому вторая по значимости операция — обновления скачанной рабочей копии. Рекомендуется как можно чаще обновлять свои рабочие копии. При обновлении скачиваются только изменённые файлы, добавляются новые и удаляются удалённые из репозитория файлы. Итак, чтобы обновить рабочую копию, нужно:
- Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
- Нажимаем правой кнопкой по свободному месту в папке, выбираем «SVN Update«.
- В открывшемся окне наблюдаем за процессом обновления: списком добавленных, изменённых и/или удалённых файлов, текущим номером версии. Здесь же можно нажать кнопку «Show log…» чтобы просмотреть список, прочитать описание изменений (если указано), сравнить текущую версию с предыдущей и т.д.
- Нажмите «OK» чтобы закрыть это окно. Репозитарий обновлён до последней версии.
Сохранение своих изменений в репозиторий (Commit)
Если Вы хотите внести свои изменения в скачанный репозиторий и у Вас есть на это право (право коммита в репозиторий), то просто начинайте работать с локальной рабочей копией как с обычной папкой: создавайте, редактируйте, удаляйте файлы и/или папки. Теперь чтобы внести изменения в репозиторий, нужно:
- Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows. Внимание! Рабочая копия должна быть скачана от логина пользователя, у которого есть право на коммит изменений (коммит-флаг).
- Нажимаем правой кнопкой по свободному месту в папке, выбираем «SVN Commit…«.
- В открывшемся окне «Commit» в секции «Message» вводим краткое описание своих изменений (это рекомендуется делать всегда, особенно если не Вы один работаете над проектом), но описание можно и оставить пустым (не рекомендуется, т.к. другие разработчики или пользователи не смогут понять что именно было изменено). В этом поле разрешено использовать буквы национальных алфавитов (присутствует полная поддержка юникода), но, к сожалению, некоторые веб-клиенты svn (отображающие в браузере список изменений) вместо русских букв отображают кракозябры. TortoiseSVN лишён этого недостатка.
- В секции «Changes made (double-click on file for diff)» Вы увидите список всех изменённых, добавленных и удалённых Вами файлов локальной рабочей копии. У изменённых файлов будут автоматически стоять флажки, у остальных — нет. Установите флажки у тех файлов, изменения которых должны быть загружены на svn-сервер (есть флажок — файл обновляется, добавляется, удаляется; нет флажка — остаётся без изменений). Двойной щелчок по файлу запустит утилиту Tortoise Merge (предназначена для сравнения версий файлов), которая покажет последнюю версию файла из репозитория SVN в левом окне и текущую рабочую копию в правом. Изменения будут выделены: удалённые строки зачёркнуты, добавленные выделены.
- После выделения нужных файлов или всех сразу («Select / deselect all«), нажмите кнопку «OK» и дождитесь окончания загрузки изменений на сервер. Будет открыто окно со списком добавленных, изменённых и/или удалённых файлов, а также указан текущий номер ревизии.
Работа с репозиторием напрямую на сервере
Иногда требуется работать с svn-репозиторием напрямую на сервере не скачивая его на локальный компьютер. Для этих целей существует утилита «SVN Repo-browser«, также входящая в состав TortoiseSVN. Работать с ней очень просто:
- Запускаем проводник Windows, заходим в любую папку, нажимаем правой кнопкой по свободному месту и выбираем «SVN Repo-browser«.
- В открывшемся окне «URL» вводим полный URL нужного нам svn-репозитория и нажимаем «OK«.
- Будет открыто главное окно утилиты: «%URL% — Repository Browser«, где %URL% — URL репозитория. Работать в этом окне можно так же, как в Проводнике Windows. Разрешено перетаскивание объектов (Drag and Drop). Через контекстное меню файла/папки можно:
- удалять «Delete…«, переименовывать «Rename» файлы и каталоги (папки);
- добавить файл («Add file…«) или папку («Add folder…«) в репозиторий;
- создать пустую папку («Create folder«) в репозитории;
- скачать («Checkout…«) репозиторий (см. выше);
- извлечь файл или папку из репозитория без служебных каталогов («Export…«). Извлечённая папка отличается от рабочей копии тем, что её нельзя обновлять и она не содержит служебных скрытых каталогов .svn;
- создать ветку или тег («Copy to…«);
- изменять свойства файла или папки («Show properties«).
- Любое изменение требует ввести текст комментария (разрешается не вводить и оставить поле пустым) и увеличивает номер ревизии на единицу. Изменения применяются немедленно.
- Нажмите кнопку «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/, а выше него на один уровень! Чтобы создать метку или ветвление, нужно (у Вас должно быть право коммита в репозиторий для создания меток или ветвлений):
- Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
- Нажимаем правой кнопкой по свободному месту и выбираем «TortoiseSVN» — «Branch/tag…«.
- В открывшемся окне в поле «To URL» введите полный URL с путём до нового тега. Пример: http://ваш_проект.svn.sourceforge.net/tags/RELEASE-1.0 (это только пример; пути должны указывать на Ваш проект).
- В секции «Create copy in the repository from» укажите «HEAD revision in the repository» (последняя ревизия; рекомендуется), либо укажите номер ревизии вручную, выбрав «Specific revision in the repository ###«, либо создайте тег из текущей рабочей копии «Working copy» (не рекомендуется).
- В секции «Log message» укажите комментарий к ревизии (например, %НАЗВАНИЕ_ПРОЕКТА% %ВЕРСИЯ_ПРОЕКТА% Released).
- Нажмите «OK«. Флажок в строке «Switch working copy to new branch/tag» ставить не рекомендуется, т.к. это переключит Вашу текущую рабочую копию на новый путь, что может привести к различным ошибкам и проблемам.
Откат изменений в рабочей копии
Если работая с локальным репозиторием Вы совершили какую-либо ошибку, например, повредили какой-то файл, неправильно отредактировали и т.д., то это легко исправить:
- Заходим в папку, в которой находятся файлы скачанной рабочей копии в Проводнике Windows.
- Нажимаем правой кнопкой по свободному месту и выбираем «TortoiseSVN» — «Revert…«.
- В открывшемся окне Вы увидите список всех изменённых файлов Вашей рабочей копии. Установите флажок у того файла, который Вы хотите откатить до версии из репозитория, либо выберите сразу все файлы («Select / deselect all«). Двойной щелчок по файлу покажет его отличия от оригинального файла.
- Нажмите «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» отображает различную статистическую информацию: наиболее активный и наименее активный автор, количество изменений в репозитории в неделю, общее количество изменений и т.д.