Введение
В данном 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» отображает различную статистическую информацию: наиболее активный и наименее активный автор, количество изменений в репозитории в неделю, общее количество изменений и т.д.
Спасибо, кратко и по делу. Очень понравилось много чего узнал, сейчас буду на практике применять.
Очень помогло оперативно разобраться, спасибо автору.
Otlichnoe rukovodstvo. Daje v favorites dobavil.
Огромное спасибо! Как раз для самых начинающих (я вообще ламер, но всё понял 🙂 ), написано досконально и чётко.
Спасибо! Очень полезно и доступно!
А не подскажете, где tortoisesvn хранит такие данные, как пароли от репозиториев ?
В частности, хочу перенести все на другой комп, не вводя все данные заново.
@Саша
Здесь: %APPDATA%\TortoiseSVN\ и здесь: %APPDATA%\Subversion\. Бэкапировать нужно обе.
Такой момент. Я изменил проект (ver 1.0), закомитил изменения (ver 1.1) (теперь head revision — последняя версия). Откатился до предыдущей версии (ver 1.0) и сделал другие изменения. Как мне теперь комитить эти последние изменения в репозиторий? Если делаю комит, то говорит, что версия устарела.
@Mikhail
Если Вы сделали изменения в разных ветках и хотите сделать объединение ревизий (merge revisions), нажмите правой кнопкой по локальной копии проекта -> TortoiseSVN -> Merge. В открывшемся окне Вы должны указать что объединять: ревизии, либо ветки.
Спасибо, разобрался с полного ноля:)
Прошу прощения, программой пользовался только один раз и то только вчера, случайно с и-нета вылетел. Докачивать не хочет. Выдаёт следующее:
Command: Update
Error: Working copy ‘E:\Движок’ locked.
Error: ‘E:\Движок’ is already locked.
Completed!:
Пытался разблокировать, не получается. Прошу помочь, кто знает в чём дело )
Да кстати в моей стране при перезаходе в нет каждый раз другое IPшник, не знаю зависит ли это, но так на всякий )
Да, локальная копия была повреждена. Вам нужно либо сделать svn cleanup (TortoiseSVN -> Clean up), либо удалить её и закачать заново.
Это не имеет значения.
Спасибо большое за ответ!
Я вот тут нашёл такую вещь в программе как простой проводник и просто копирую с сайта те файлы которые не докачал, осталось то всего метров 100. Насколько это эффективно? В принципе мне кажется это только нудно, т.к. каталоги считаешь которые не докачались )
@Дайм
Настоятельно не рекомендуется извлекать файлы из репозитория, т.к. Вы потеряете самое главное — возможность синхронизации изменений в локальном репозитории с удалённым (да и локального репозитория как такового при подобном способе не будет; будет просто набор файлов, которые не управляются системой контроля версий).
ПРОБЛЕМА!
пробовал с 3х компов…. инет. адреса и операционки разные
везде при попытке докачать Working copy ‘C:\адрес\dev1257′ locked.
C:\адрес\dev1257’ is already locked.
(начинает качать если заново начинаешь проект- файл качается не весь(где то 700 метров из 3Гб)
апдейт выдает эти 2 строки.
в чем может быть причина?
@Сергей
Нажмите правой кнопкой по проекту — TortoiseSVN — Release lock. Потребуются права администратора репозитория.
Качал файл через SVN для Garry’s Mod, папки cap и cap_resource помечены галочкой, а папка svn полупрозрачная и ничем не помеченная. А когда файлы качал написал ошибку о том что сервер либо упал, либо остановил трансляцию. Что мне надо делать?
@CrazySanya
Каталог .svn содержит копии всех файлов репозитория и используется для служебных целей (восстановление и т.д.).
Вы можете либо всё удалить и закачать заново, либо продолжить, запустив SVN Update.
Огромное спасибо автору. Человечище!
Здравствуйте, большое спасибо!!!
Долго мучился, пока не наткнулся на Вашу статью!
Все предельно ясно!
Здравствуйте, а эта программа, может сама автоматически обновлять уже скачанные файлы?
Автоматически — нет. Если вы хотите обновлять ряд svn-репозиториев автоматически, то создайте cmd-файл, который будет вызывать svn update в каталоге с рабочей копией и настройте его автоматический запуск по расписанию например при помощи штатного планировщика Windows.
Что такое Major-версия и Minor-версия проекта?
См. статью «Нумерация версия программного обеспечения«.
Ищу внешнее подключение файла внутри одного хранилища. Из каталога в каталог. Как это сделать?
TortoiseSVN поддерживает работу с локальным SVN-репозиторием без необходимости использования сервера.
Достаточно выполнить TortoiseSVN -> Checkout и указать каталог с локальным хранилищем.
Здравствуйте. Подскажите пожалуйста, где находятся настройки в TortoiseSVN?
В реестре Windows, в разделе HKEY_CURRENT_USER\Software\TortoiseSVN.
Здравствуйте. В TortoiseSVN используются пометки на значках, которые обозначают состояние документа. У всех есть, а у меня почему-то нет. Не подскажите, что нужно сделать, что они появились?
Включается в настройках, на странице Icons Overlays.
Спасибо, помог, очень было полезно!