Работа с 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» отображает различную статистическую информацию: наиболее активный и наименее активный автор, количество изменений в репозитории в неделю, общее количество изменений и т.д.

31 comment to post

  1. Спасибо, кратко и по делу. Очень понравилось много чего узнал, сейчас буду на практике применять.

  2. Очень помогло оперативно разобраться, спасибо автору.

  3. Огромное спасибо! Как раз для самых начинающих (я вообще ламер, но всё понял 🙂 ), написано досконально и чётко.

  4. А не подскажете, где tortoisesvn хранит такие данные, как пароли от репозиториев ?
    В частности, хочу перенести все на другой комп, не вводя все данные заново.

  5. Такой момент. Я изменил проект (ver 1.0), закомитил изменения (ver 1.1) (теперь head revision — последняя версия). Откатился до предыдущей версии (ver 1.0) и сделал другие изменения. Как мне теперь комитить эти последние изменения в репозиторий? Если делаю комит, то говорит, что версия устарела.

  6. @Mikhail
    Если Вы сделали изменения в разных ветках и хотите сделать объединение ревизий (merge revisions), нажмите правой кнопкой по локальной копии проекта -> TortoiseSVN -> Merge. В открывшемся окне Вы должны указать что объединять: ревизии, либо ветки.

  7. Спасибо, разобрался с полного ноля:)

  8. Прошу прощения, программой пользовался только один раз и то только вчера, случайно с и-нета вылетел. Докачивать не хочет. Выдаёт следующее:
    Command: Update
    Error: Working copy ‘E:\Движок’ locked.
    Error: ‘E:\Движок’ is already locked.
    Completed!:
    Пытался разблокировать, не получается. Прошу помочь, кто знает в чём дело )
    Да кстати в моей стране при перезаходе в нет каждый раз другое IPшник, не знаю зависит ли это, но так на всякий )

  9. Дайм :

    Прошу прощения, программой пользовался только один раз и то только вчера, случайно с и-нета вылетел. Докачивать не хочет.

    Да, локальная копия была повреждена. Вам нужно либо сделать svn cleanup (TortoiseSVN -> Clean up), либо удалить её и закачать заново.

    Дайм :

    Да кстати в моей стране при перезаходе в нет каждый раз другое IPшник, не знаю зависит ли это, но так на всякий )

    Это не имеет значения.

  10. Спасибо большое за ответ!
    Я вот тут нашёл такую вещь в программе как простой проводник и просто копирую с сайта те файлы которые не докачал, осталось то всего метров 100. Насколько это эффективно? В принципе мне кажется это только нудно, т.к. каталоги считаешь которые не докачались )

  11. @Дайм
    Настоятельно не рекомендуется извлекать файлы из репозитория, т.к. Вы потеряете самое главное — возможность синхронизации изменений в локальном репозитории с удалённым (да и локального репозитория как такового при подобном способе не будет; будет просто набор файлов, которые не управляются системой контроля версий).

  12. ПРОБЛЕМА!
    пробовал с 3х компов…. инет. адреса и операционки разные
    везде при попытке докачать Working copy ‘C:\адрес\dev1257′ locked.
    C:\адрес\dev1257’ is already locked.
    (начинает качать если заново начинаешь проект- файл качается не весь(где то 700 метров из 3Гб)
    апдейт выдает эти 2 строки.
    в чем может быть причина?

  13. @Сергей
    Нажмите правой кнопкой по проекту — TortoiseSVNRelease lock. Потребуются права администратора репозитория.

  14. Качал файл через SVN для Garry’s Mod, папки cap и cap_resource помечены галочкой, а папка svn полупрозрачная и ничем не помеченная. А когда файлы качал написал ошибку о том что сервер либо упал, либо остановил трансляцию. Что мне надо делать?

  15. @CrazySanya
    Каталог .svn содержит копии всех файлов репозитория и используется для служебных целей (восстановление и т.д.).

    Вы можете либо всё удалить и закачать заново, либо продолжить, запустив SVN Update.

  16. Огромное спасибо автору. Человечище!

  17. Здравствуйте, большое спасибо!!!
    Долго мучился, пока не наткнулся на Вашу статью!
    Все предельно ясно!

  18. Здравствуйте, а эта программа, может сама автоматически обновлять уже скачанные файлы?

  19. Магомед :

    Здравствуйте, а эта программа, может сама автоматически обновлять уже скачанные файлы?

    Автоматически — нет. Если вы хотите обновлять ряд svn-репозиториев автоматически, то создайте cmd-файл, который будет вызывать svn update в каталоге с рабочей копией и настройте его автоматический запуск по расписанию например при помощи штатного планировщика Windows.

  20. Что такое Major-версия и Minor-версия проекта?

  21. Ищу внешнее подключение файла внутри одного хранилища. Из каталога в каталог. Как это сделать?

    1. TortoiseSVN поддерживает работу с локальным SVN-репозиторием без необходимости использования сервера.

      Достаточно выполнить TortoiseSVN -> Checkout и указать каталог с локальным хранилищем.

  22. Здравствуйте. Подскажите пожалуйста, где находятся настройки в TortoiseSVN?

  23. Здравствуйте. В TortoiseSVN используются пометки на значках, которые обозначают состояние документа. У всех есть, а у меня почему-то нет. Не подскажите, что нужно сделать, что они появились?

Обсуждение закрыто.