Настройки - TortoiseSVN

Клиент Subversion для Windows

Version 1.12

Стефан Кюнг

Люббэ Онкен

Саймон Ладж

Vladimir Serdyuk ([email protected])

Перевод 

Станислав Петраков ([email protected])

Перевод 

Siarhei Niakhai ([email protected])

Перевод 

2019/03/11 21:25:21 (r28524)


Содержание

Предисловие
Что такое TortoiseSVN?
Возможности TortoiseSVN
Лицензия
Разработчики
История TortoiseSVN
Благодарности
Структура книги
Используемая терминология
1. Приступая к работе
Установка TortoiseSVN
Требования к системе
Установка
Основная концепция
Тест-драйв
Создание хранилища
Импорт проекта
Извлечение рабочей копии
Внесение изменений
Добавление новых файлов
Просмотр истории проекта
Отмена изменений
Далее ...
2. Основные понятия управления версиями
Хранилище
Модели версирования
Проблема совместного использования файлов
Модель Блокирование-Изменение-Разблокирование
Модель Копирование-Изменение-Слияние
Что же делает Subversion?
Subversion в действии
Рабочие копии
Адреса URL хранилища
Ревизии
Как рабочие копии отслеживают хранилище
Подводя итоги
3. Хранилище
Создание хранилища
Создание хранилища при помощи клиента командной строки
Создание хранилища при помощи TortoiseSVN
Локальный доступ к хранилищу
Доступ к хранилищу на сетевом ресурсе
Организация данных в хранилище
Резервирование хранилища
Скрипты ловушек, выполняемые на стороне сервера
Ссылки для извлечения
Доступ к хранилищу
4. Руководство по ежедневному использованию
Основные Возможности
Пометки на значках
Контекстные меню
Перетаскивание мышью
Общие клавиатурные сокращения
Аутентификация
Разворачивание окон
Импорт данных в хранилище
Импорт
Импорт на месте
Особые файлы
Извлечение рабочей копии
Глубина извлечения
Фиксация ваших изменений в хранилище
Диалог фиксации
Группы изменений
Фиксировать только части файлов
Исключение элементов из списка для фиксации
Сообщения журнала при фиксации
Ход выполнения фиксации
Обновление вашей рабочей копии путём внесения изменений, которые сделаны другими
Улаживание конфликтов
Конфликты файлов
Конфликт свойств
Конфликты деревьев
Получение информации о статусе
Пометки на значках
Подробный статус
Локальный и удалённый статус
Просмотр различий
Группы изменений
Shelving
Диалоговое окно журнала ревизий
Вызов диалога журнала ревизий
Действия в журнале ревизий
Получение дополнительной информации
Получение большего количества сообщений журнала
Текущая ревизия рабочей копии
Возможности по отслеживанию слияний
Изменение сообщения журнала и автора
Фильтрация сообщений журнала
Статистическая информация
Автономный режим
Обновление вида
Просмотр различий
Различия в файлах
Параметры сравнения завершений строк и непечатаемых знаков
Сравнение папок
Сравнение картинок при помощи TortoiseIDiff
Сравнение докуменов формата Office
Внешние инструменты просмотра различий/слияния
Добавление новых файлов и папок
Копирование/перемещение/переименование файлов и папок
Игнорирование файлов и папок
Сопоставление шаблону в списках игнорирования
Удаление, перемещение и переименование
Удаление файлов и папок
Перемещение файлов и папок
Как справиться с конфликтами из-за регистра символов в именах файлов
Исправление переименования файлов
Удаление неверсированных файлов
Отмена изменений
Очистка
Установки проекта
Свойства Subversion
Свойства проекта в TortoiseSVN
Свойства
Внешние включения
Внешние папки
Внешние файлы
Создание внешних включений с помощью перетаскивания (drag-and-drop)
Ответвления и метки
Создание ответвления или метки
Другие способы создания ответвления или метки
Извлечь? Или переключиться?..
Слияние
Слияние с диапазоном ревизий
Слияние двух различных деревьев
Параметры слияния
Просмотр результатов слияния
Отслеживание слияний
Обработка конфликтов после слияния
Сопровождение ответвления разработки новой возможности
Блокирование
Как работает блокировка в Subversion
Получение блокировки
Снятие блокировки
Проверка состояния блокировки
Незаблокированные файлы, доступные только-для-чтения
Скрипты ловушек на события блокировки
Создание и применение заплаток
Создание файла заплатки
Применение файла заплатки
Кто какую строку изменил?
Авторство для файлов
Авторство различий
Обозреватель хранилища
Графы ревизий
Узлы графа ревизий
Изменение вида
Использование графа
Обновление вида
Подрезка деревьев
Экспорт рабочей копии Subversion
Выведение рабочей копии из-под управления версиями
Перебазирование рабочей копии
Интеграция с системами отслеживания ошибок/проблем
Добавление номеров проблем к сообщениям журнала
Получение информации из системы отслеживания проблем
Интеграция со средствами просмотра хранилища, работающими через веб-интерфейс
Настройки TortoiseSVN
Общие настройки
Настройки графа ревизий
Настройки пометок на значках
Настройки сети
Настройки внешних программ
Настройки сохранённых данных
Кэширование журнала
Скрипты ловушек, выполняемые на стороне клиента
Настройки TortoiseBlame
Настройки TortoiseUDiff
Экспортировать TSVN настройки
Дополнительные настройки
Последний шаг
5. Монитор проекта
Добавление проектов к отслеживанию
Диалог монитора
Основные операции
6. Программа SubWCRev
Командная строка SubWCRev
Подстановка ключевых слов
Пример для ключевых слов
COM-интерфейс
7. Интерфейс IBugtraqProvider
Соглашение об именование
Интерфейс IBugtraqProvider
Интерфейс IBugtraqProvider2
A. Часто задаваемые вопросы (ЧаВо, FAQ)
B. Как я могу...
Переместить/скопировать множество файлов за один раз
Заставить пользователей вводить сообщение журнала
Скрипт-ловушка на сервере
Свойства проекта
Обновить выбранные файлы из хранилища
Возвратиться к старым ревизиям в хранилище (откат)
При помощи диалога журнала ревизий
Используя диалог слияния
Используя svndumpfilter
Сравнить две ревизии файла или папки
Включить общий подпроект
Используя svn:externals
Используя вложенную рабочую копию
Используя относительное месторасположение
Добавить проект в хранилище
Создать ярлык к хранилищу
Игнорировать файлы, которые уже версированы
Разверсирование рабочей копии
Удаление рабочей копии
C. Полезные подсказки для администраторов
Распространение TortoiseSVN через групповые политики
Перенаправление проверки обновлений
Установка переменной окружения SVN_ASP_DOT_NET_HACK
Отключение пунктов контекстного меню
D. Автоматизация TortoiseSVN
Команды TortoiseSVN
Обработчик Tsvncmd для URL
Команды TortoiseIDiff
Комманды TortoiseUDiff
E. Справочник соответствия с интерфейсом командной строки
Соглашения и основные правила
Команды TortoiseSVN
Извлечь
Обновить
Обновить до ревизии
Фиксировать
Различие
Журнал
Проверка на наличие изменений
Граф ревизий
Обозреватель хранилища
Редактировать конфликты
Улажено
Переименовать
Удалить
Убрать изменения
Очистка
Заблокировать
Снятие блокировки
Ответвление/Метка
Параметр
Слияние
Экспорт
Перебазировать
Создать здесь хранилище
Добавить
Импорт
Авторство (Blame)
Добавить в список игнорирования
Создать заплатку
Применить заплатку
F. Подробности реализации
Пометки на значках
G. Языковые пакеты и проверка правописания
Языковые пакеты
Проверка правописания
Глоссарий
Предметный указатель

Список иллюстраций

1.1. Меню TortoiseSVN для неверсированных папок
1.2. Диалог импорта
1.3. Просмотрщик изменений в файлах
1.4. Диалоговое окно журнала
2.1. Типичная система Клиент/Сервер
2.2. Проблема потери изменений
2.3. Модель Блокирование-Изменение-Разблокирование
2.4. Модель Копирование-Изменение-Слияние
2.5. ...Копирование-Изменение-Слияние. Продолжение
2.6. Файловая система хранилища
2.7. Хранилище
3.1. Меню TortoiseSVN для неверсированных папок
4.1. Проводник с пометками на значках
4.2. Контекстное меню для папки, находящейся под управлением версиями
4.3. Меню "Файл" Проводника для ярлыка в версированной папке
4.4. Меню при перетаскивании правой клавишей мыши для папки под управлением версиями
4.5. Диалог аутентификации
4.6. Диалог импорта
4.7. Диалог извлечения
4.8. Диалог фиксации
4.9. Проверка правописания в диалоге фиксации
4.10. Диалог выполнения, отображающий ход выполнения фиксации
4.11. Окно выполнения, отображающее законченное обновление
4.12. Проводник с пометками на значках
4.13. Страница свойств Проводника, вкладка Subversion
4.14. Проверка на наличие изменений
4.15. Диалог фиксации с группами изменений.
4.16. Shelve dialog
4.17. Unshelve dialog
4.18. Диалоговое окно журнала ревизий
4.19. Контекстное меню верхней панели диалогового окна журнала ревизий
4.20. Диалог настроек Code Collaborator
4.21. Контекстное меню верхней панели для двух выбранных ревизий
4.22. Контекстное меню нижней панели окна журнала
4.23. Нижняя панель диалога журнала с контекстным меню при нескольких выбранных файлах.
4.24. Диалог журнала, показывающий ревизии с отслеженными слияниями
4.25. Гистограмма Фиксации-по-автору
4.26. Секторная диаграмма Фиксации-по-автору
4.27. График Фиксации-по-датам
4.28. Диалог перехода в автономный режим
4.29. Диалог сравнения ревизий
4.30. Программа просмотра различий в картинках
4.31. Контекстное меню Проводника для неверсированных файлов
4.32. Меню при перетаскивании правой клавишей мыши для папки под управлением версиями
4.33. Контекстное меню Проводника для неверсированных файлов
4.34. Контекстное меню Проводника для версированных файлов
4.35. Диалог 'Убрать изменения'
4.36. Диалог Очистки
4.37. Страница свойств Subversion
4.38. Добавление свойств
4.39. Диалог свойства пользовательских булевых типов
4.40. Диалог свойства пользовательских типов состояния
4.41. Диалог свойства пользовательских однострочных типов
4.42. Диалог свойства пользовательских многострочных типов
4.43. страница свойств svn:externals
4.44. страница свойств svn:keywords
4.45. страница свойств svn:eol-style
4.46. страница свойств tsvn:bugtraq
4.47. Страница свойств размер журнала сообщений
4.48. Страница свойств язык
4.49. Страница свойств svn:mime-type
4.50. Страница свойств svn:needs-lock
4.51. Страница свойств svn:executable
4.52. Диалог свойства шаблонов сообщения журнала для слияния
4.53. Диалог создания ответвления/метки
4.54. Диалог переключения
4.55. Мастер слияния - выбор диапазона ревизий
4.56. Мастер слияния - слияние деревьев
4.57. Диалог конфликта слияния
4.58. The Merge Tree Conflict Dialog
4.59. Диалог 'Слить Всё'
4.60. Диалог блокировки
4.61. Диалог проверки на наличие изменений
4.62. Диалог создания заплатки
4.63. Диалог авторства/аннотирования
4.64. TortoiseBlame
4.65. Обозреватель хранилища
4.66. Граф ревизий
4.67. Диалог Экспорт-из-URL
4.68. Диалог перебазирования
4.69. Диалоговое окно свойств Bugtraq
4.70. Пример диалога запроса системы отслеживания проблем
4.71. Страница 'Общее' в диалоге настроек
4.72. Страница контекстного меню в диалоге настроек
4.73. Страница 'Диалоги 1' в диалоге настроек
4.74. Страница 'Диалоги 2' в диалоге настроек
4.75. Страница 'Диалоги 3' в диалоге настроек
4.76. Страница 'Цвета' в диалоге настроек
4.77. Страница 'Граф ревизий' в диалоге настроек
4.78. Страница 'Цвета' графа ревизий в диалоге настроек
4.79. Страница 'Пометки на значках' в диалоге настроек
4.80. Страница 'Набор значков' в диалоге настроек
4.81. Страница 'Обработчики значков' в диалоге настроек.
4.82. Страница 'Сеть' в диалоге настроек
4.83. Страница 'Просмотр различий' в диалоге настроек
4.84. Окно дополнительных настроек сравнения/слияния в диалоге настроек
4.85. Страница 'Сохранённые данные' в диалоге настроек
4.86. Страница 'Кэширование журнала' в диалоге настроек
4.87. Окно 'Статистика кэша журнала', открываемое из диалога настроек
4.88. Страница 'Скрипты ловушек' в диалоге настроек
4.89. Окно 'Настройка скрипта ловушки', открываемое из диалога настроек
4.90. Страница интеграции с системой отслеживания проблем в диалоге настроек
4.91. Страница TortoiseBlame в диалоге настроек
4.92. Диалог Настройки, страница TortoiseUDiff
4.93. Диалог Настройки, страница Синхронизация
4.94. Панель задач с группировкой по-умолчанию
4.95. Панель задач с группировкой по хранилищам
4.96. Панель задач с группировкой по хранилищам
4.97. Группировка панели задач с цветным оверлеем хранилища
5.1. Диалог редактирования проекта монитора проекта
5.2. Основной диалог монитора проекта
C.1. Диалог фиксации показывающий уведомление об обновлении

Список таблиц

2.1. URL для доступа к хранилищу
4.1. Закреплённая ревизия
6.1. Список доступных параметров командной строки
6.2. Список кодов ошибок SubWCRev
6.3. Список доступных ключевых слов
6.4. Поддерживаемые методы COM/автоматизации
C.1. Пункты меню и соответствующие им значения
D.1. Список доступных команд и параметров
D.2. Список доступных параметров
D.3. Список доступных параметров

Предисловие

Управление версиями - это искусство управления изменениями информации. Этот инструмент давно стал критически важным для программистов, обычно тратящих свое время на создание небольших изменений в программе, некоторые из которых надо на другой день убрать или проверить. А теперь вообразите команду таких программистов, работающих одновременно, да ещё и над одними и теми же файлами! - и вы сможете понять, зачем нужна хорошая система для управления потенциальным хаосом.

Что такое TortoiseSVN?

TortoiseSVN — это бесплатный Windows-клиент с открытыми исходным кодом для системы управления версиями Apache™ Subversion®. То есть TortoiseSVN управляет файлами и директориями во времени. Файлы хранятся в центральном хранилище. Хранилище больше похоже на обычный файловый сервер, кроме того он запоминает каждое изменение когда-либо сделанное в ваших файлах и директориях. Это позволяет вам восстановить старые версии ваших файлов и проверить историю изменений — как, когда и кто изменял ваши данные. Вот почему многие думают о Subversion, и вообще о системах управления версиями, как о своего рода «машине времени».

Некоторые системы контроля версий являются также и системами управления конфигурацией программ (software configuration management - SCM). Такие системы специально созданы для управления деревьями исходного кода, и имеют множество возможностей, специфичных для разработки программ, таких как непосредственное понимание языков программирования, или предоставление инструментов для сборки программ. Однако Subversion не является такой системой, она является системой общего назначения, которая может быть использована для управления любым набором файлов, включая и исходные коды программ.

Возможности TortoiseSVN

Что делает TortoiseSVN таким хорошим клиентом Subversion? Вот краткий список возможностей:

Интеграция с оболочкой

TortoiseSVN интегрируется непосредственно в оболочку Windows (т.е. в Проводник). Это значит, что вы можете работать с уже знакомыми инструментами, и вам не надо переключаться на другое приложение каждый раз, когда вам необходимы функции для управления версиями!

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

Пометки на значках

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

Графический интерфейс пользователя

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

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

Простой доступ к командам Subversion

Все команды Subversion доступны из контекстного меню Проводника. TortoiseSVN добавляет туда собственное подменю.

Поскольку TortoiseSVN является клиентом Subversion, мы хотели бы показать и некоторые из возможностей самой Subversion:

Версирование папок

CVS отслеживает только историю отдельных файлов, тогда как Subversion реализует «виртуальную» версионную файловую систему, которая отслеживает изменения в целых деревьях папок во времени. Файлы и папки являются версированными. В результате, есть команды переместить и копировать, реально выполняемые на стороне клиента и работающие непосредственно с файлами и папками.

Атомарные фиксации

Фиксация сохраняется в хранилище либо полностью, либо не сохраняется вообще. Это позволяет разработчикам фиксировать изменения, собранные в логически связанные части.

Версированные метаданные

Каждый файл и папка имеет прикреплённый невидимый набор «свойств». Вы можете создавать и сохранять произвольные пары ключ/значение для собственных нужд. Свойства тоже версируются во времени, как и содержимое файла.

Возможность выбора сетевого уровня

В Subversion есть абстрагируемое понятие доступа к хранилищу, которое упрощает реализацию новых сетевых механизмов. «Усовершенствованный» сетевой сервер Subversion является модулем для веб-сервера Apache, который использует для взаимодействия диалект HTTP под названием WebDAV/DeltaV. Это даёт Subversion большие преимущества в стабильности и совместимости, и предоставляет различные ключевые возможности без дополнительных затрат: проверка личности (аутентификация), проверка прав доступа (авторизация), сжатие потока данных при передаче, просмотр хранилища. Также доступна меньшая, автономная версия сервера Subversion, взаимодействующая по собственному протоколу, который легко может быть туннелирован через ssh.

Единый способ обработки данных

Subversion получает различия между файлами при помощи бинарного разностного алгоритма, который работает одинаково как с текстовыми (читаемыми человеком), так и с бинарными (не читаемыми человеком) файлами. Оба типа файлов содержатся в хранилище в сжатом виде, а различия передаются по сети в обоих направлениях.

Эффективные ветки и метки

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

Лицензия

"TortoiseSVN это открытое программное обеспечение, разработанное под лицензией GNU (GPL). Оно бесплатно как для скачивания, так и для персонального или коммерческого использования на любом количестве компьютеров.

Несмотря на то, что большинство загружают лишь установочный файл, вы имеете полный доступ на чтение к исходному коду этой программы. Вы можете просмотреть его по ссылке https://sourceforge.net/p/tortoisesvn/code/HEAD/tree/. Самая последняя версия, над которой мы работаем в данный момент, находится в /trunk/, ранее выпущенные версии находятся в /tags/.

Разработчики

Обе программы: и TortoiseSVN, и Subversion, разработаны сообществом людей, работающих в этих проектах. Это люди из разных стран со всего света, и они объединились для создания замечательных программ.

История TortoiseSVN

В 2002 году Тим Кемп (Tim Kemp) обнаружил, что Subversion - очень хорошая система управления версиями, но ей не хватает хорошего клиента с графическим интерфейсом. Идея реализации клиента Subversion как расширения оболочки Windows была навеяна похожим клиентом для системы CVS, TortoiseCVS. Тим изучил исходный код TortoiseCVS и использовал его как основу для TortoiseSVN. Потом он основал проект, зарегистрировал сайт tortoisesvn.org и выложил исходный код в Интернет.

В это время Стефан Кунг (Stefan Küng) искал хорошую и бесплатную систему управления версиями, и обнаружил Subversion и исходный код TortoiseSVN. Поскольку TortoiseSVN всё ещё было невозможно использовать, он присоединился к проекту и начал программировать. Вскоре он переписал большинство существующего кода и начал добавлять команды и новые возможности, пока ничего из первоначального кода не осталось.

Со временем Subversion становилась всё более стабильной и привлекала всё больше и больше пользователей, которые начинали использовать TortoiseSVN для доступа к Subversion. Число пользователей быстро росло (и продолжает расти каждый день). Именно тогда Люббе Онкен (Lübbe Onken) предложил помощь в создании некоторых симпатичных значков и логотипа для TortoiseSVN. Он также взял на себя заботу о веб-сайте и стал руководить переводами.

Со временем другие системы управления версиями получили свои собственные Tortoise-клиенты, что привело к проблеме с оверлейными иконками в проводнике: количество таких оверлеев ограничено и даже один Tortoise-клиент легко может превысить этот лимит. Тогда Stefan Küng реализовал компонент TortoiseOverlays, который позволяет всем Tortoise-клиентам использовать одни и те же оверлейные иконки. Теперь все Tortoise-клиенты с открытым исходным кодом и даже некоторые не Tortoise-клиенты используют этот общедоступный компонент.

Благодарности

Тиму Кемпу (Tim Kemp)

за основание проекта TortoiseSVN

Стефану Кунгу (Stefan Küng)

за тяжёлый труд по реализации того, чем TortoiseSVN является сейчас

Люббе Онкену (Lübbe Onken)

за прекрасные иконки, логотип, отлов ошибок, за перевод и координацию деятельности по переводу

Саймону Ладжу (Simon Large)

за работу над документацией

Stefan Fuhrmann

за кеширование журнала и граф ревизий

Книге о Subversion (The Subversion Book)

за прекрасное введение в Subversion и главу 2, которую мы сюда скопировали

Проекту Tigris Style (The Tigris Style project)

за некоторые стили, использованные в этой документации

Нашим помощникам

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

Нашим дарителям

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

Структура книги

Эта книга написана для тех, кто, владея компьютерной грамотой, хочет использовать Subversion для управления своими данными, но чувствует себя неуютно, применяя для этого клиенты командной строки. Поскольку TortoiseSVN - расширение оболочки Windows, предполагается, что пользователь знаком с Проводником Windows и знает, как его использовать.

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

В главе Глава 1, Приступая к работе излагается, как установить TortoiseSVN на ваш компьютер и сразу начать им пользоваться.

В главе Глава 2, Основные понятия управления версиями мы даём краткое введение в систему управления версиями Subversion, лежащую в основе TortoiseSVN. Оно позаимствовано из документации проекта Subversion и объясняет различные подходы к управлению версиями, и то, как работает Subversion.

В главе о Глава 3, Хранилище рассказывается о том, как создать локальное хранилище, полезное для проверки Subversion и TortoiseSVN в рамках одного компьютера. В ней также немного рассказывается об администрировании хранилища, что также относится и к хранилищам, расположенным на сервере.

Глава 4, Руководство по ежедневному использованию является наиболее важным разделом, поскольку описывает все основные возможности TortoiseSVN и способы их использования. Оно представлено в виде учебного пособия, которое начинает с создания рабочей копии, её изменения, фиксации изменений и т.д., а дальше переходит к более сложным вопросам.

The Глава 5, Монитор проекта explains how you can monitor your Subversion projects so you don't miss important commits from your other team members.

Глава 6, Программа SubWCRev - это отдельная программа, идущая вместе с TortoiseSVN, которая может извлекать информацию из вашей рабочей копии и записывать её в файл. Она пригодится для включения данных о сборке в ваши проекты.

Приложение Приложение B, Как я могу... отвечает на некоторые общие вопросы о решении задач, которые не освещены детально в каком-нибудь другом месте.

Раздел Приложение D, Автоматизация TortoiseSVN показывает, как диалоговые окна TortoiseSVN могут быть вызваны из командной строки. Это будет полезно при написании сценариев, в которых, тем не менее, необходимо взаимодействие с пользователем.

Приложение E, Справочник соответствия с интерфейсом командной строки показывает, как соотносятся команды TortoiseSVN и их эквиваленты в клиенте командной строки Subversion svn.exe.

Используемая терминология

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

Выбор меню обозначен стрелкой. TortoiseSVNЖурнал означает: выберите Журнал в контекстном меню TortoiseSVN.

Использование контекстного меню обозначается следующим образом: Контекстное менюСохранить как...

Кнопки пользовательского интерфейса обозначаются так: Нажмите ОК для продолжения.

Действия пользователя обозначены полужирным шрифтом.Alt+A: нажмите клавишу Alt на вашей клавиатуре и, удерживая её нажатой, нажмите клавишу A. Перетаскивание правой кнопкой: нажмите правую кнопку мыши и, удерживая её нажатой, перетащите элементы в другое место.

Ввод и вывод командной строки также показан при помощи специального шрифта.

Важно

Важные примечания отмечены таким значком.

Подсказка

Делают вашу жизнь проще.

Внимание

Нужно быть особенно осторожным.

Предупреждение

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

Глава 1. Приступая к работе

Этот раздел написан для тех, кто хотел бы разобраться, что же такое TortoiseSVN и первый раз им воспользоваться. Раздел объясняет, как установить TortoiseSVN и как настроить локальное хранилище, а также дает обзор самых часто используемых операций.

Установка TortoiseSVN

Требования к системе

TortoiseSVN работает под операционной системой Vista или выше, и доступен как в 32-битной, так и в 64-битной версии. Установщик для 64-битной Windows также включает 32-битную часть. Что означает что вы не должны устанавливать 32-битную версию отдельно чтобы контекстное меню и оверлей TortoiseSVN работало в 32-битных приложениях.

Поддержка Windows 98, Windows ME и Windows NT4 была прекращена начиная с версии 1.2.0 и Windows 2000 и XP до SP2 начиная с 1.7.0. Поддержка Windows XP с SP3 была прекращена начиная с версии 1.9.0. Вы все еще можете загрузить и установить старые версии, если они вам понадобятся.

Установка

TortoiseSVN поставляется в виде простого в использовании установочного файла. Сделайте на нем двойной клик и следуйте инструкциям - остальное он сделает за вас. Не забудьте перезагрузить компьютер после установки.

Важно

Вам необходимы привилегии администратора для установки TortoiseSVN. Установщик запросит данные администратора при необходимости.

Доступны языковые пакеты, которые переводят интерфейс TortoiseSVN на множество языков. Пожалуйста, посетите Приложение G, Языковые пакеты и проверка правописания для дополнительной информации о том, как их установить.

If you encounter any problems during or after installing TortoiseSVN please refer to our online FAQ at https://tortoisesvn.net/faq.html.

Основная концепция

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

Хранилище

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

Рабочая копия

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

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

Вам также нужно знать, где найти TortoiseSVN, потому что в меню "Пуск" его нет. Это так потому, что TortoiseSVN - расширение проводника Windows, поэтому для начала нужно запустить проводник. Сделайте правый клик на папке в проводнике и вы увидите новые пункты в контекстном меню, такие как эти:

Рисунок 1.1. Меню TortoiseSVN для неверсированных папок

Меню TortoiseSVN для неверсированных папок


Тест-драйв

Этот раздел познакомит вас с наиболее используемыми функциям на примере маленького тестового хранилища. Он, конечно, не объясняет всего - это ведь всего лишь краткое руководство. После ознакомления вам нужно запастись временем, чтобы прочесть оставшуюся часть данного руководства, которая более детально освещает функции приложения. Она к тому же объясняет как правильно настроить сервер Subversion.

Создание хранилища

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

Сначала создайте новую пустую директорию на вашем ПК. Она может быть где угодно, но в этом руководстве мы собираемся назвать её C:\svn_repos. Теперь сделайте правый клик на новой папке и в контекстном меню выберите TortoiseSVNСоздать здесь хранилище.... Хранилище, созданное внутри папки, готово к использованию. Также мы создадим внутренную структуру папок нажав кнопку Создать структуру каталогов.

Важно

Функция локального хранилища очень полезна для тестирования и оценивания, но в других случаях, за исключением случая когда вы единственный разработчик работающий за одним компьютером, вы всегда должны использовать настроенный сервер Subversion. В маленьких компаниях, конечно, заманчиво избежать работы по созданию и настройке сервера и работать просто с общим сетевым ресурсом. Никогда так не делайте! Вы потеряете данные. Прочтите «Доступ к хранилищу на сетевом ресурсе» и узнаете, почему это является плохой идеей и как создать и настроить сервер.

Импорт проекта

Сейчас у нас есть хранилище, но оно совершенно пустое в данный момент. Давайте предположим, что у меня есть набор файлов в C:\Projects\Widget1, который я хотел бы добавить. Перейдите к папке Widget1 в Проводнике и сделайте правый клик на ней. Теперь выберите пункт TortoiseSVNИмпорт..., который вызовет диалог

Рисунок 1.2. Диалог импорта

Диалог импорта


К хранилищу Subversion обращаются по URL-адресу, который позволяет нам указать хранилище где угодно в Интернете. В данном случае нам нужно указать на наше локальное хранилище, которое имеет URL-адрес file:///c:/svn_repos/trunk, и к которому мы добавляем имя нашего проекта Widget1. Обратите внимание, что после file: есть 3 слэша и везде используются прямые слэши.

Другая важная функция данного диалога - это окно Сообщение импорта, в которое вы можете добавить сообщение о том, что вы делаете. Когда вам понадобится просмотреть историю проекта, эти сообщения будут ценным подспорьем для просмотра какие изменения и когда были сделаны. В нашем случае мы напишем что-нибудь простое как «Импорт проекта Виджет1». Нажмите OK, чтобы добавить папку в ваше хранилище.

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

Сейчас у нас есть проект в нашем хранилище, и нам надо создать рабочую копию для текущей работы. Заметьте, что имортирование папки не превращает автоматически эту папку в рабочую копию. Для создания свежей рабочей копии в Subversion используется термин Извлечь. Мы собираемся извлечь папку Widget1 из нашего хранилища в папку для разработки называемую C:\Projects\Widget1-Dev. Создайте эту папку, затем сделате правый клик на ней и выберите пункт TortoiseSVNИзвлечь.... Затем введите URL-адрес для извлечения, в данном случае file:///c:/svn_repos/trunk/Widget1, и кликните на OK. Наша папка для разработки заполнится файлами из хранилища.

Важно

При настройках по умолчанию пункт меню "Извлечь" размещён не в подменю TortoiseSVN, а показан на верхнем уровне меню проводника. Команды TortoiseSVN, которые находятся не в подменю начинаются с SVN: SVN Извлечь...

Вы заметите что внешний вид этой папки отличается от обычной папки. У каждого файла появился зелёный флажок в левом углу. Это значки статуса TortoiseSVN, которые присутствуют только в рабочей копии. Зелёный статус означает, что файл не отличается от версии файла, находящегося в хранилище.

Внесение изменений

Можно приступать к работе. В папке Widget1-Dev мы начинаем редактировать файлы - предположим, мы вносим изменения в файлы Widget1.c и ReadMe.txt. Обратите внимание, что значки на этих файлах теперь стали красными и показывают, что изменения были сделаны локально.

Но какие были изменения? Нажмите правой кнопкой на одном из изменённых файлов и выберите команду TortoiseSVNРазличия. Запустится инструмент TortoiseSVN для сравнения файлов и покажет какие точно строки в файлах были изменены.

Рисунок 1.3. Просмотрщик изменений в файлах

Просмотрщик изменений в файлах


Ок, нас устраивают изменения, поэтому давайте обновим хранилище. Это действие называется Фиксировать изменения. Нажмите правой кнопкой на папке Виджет1-Дев и выберите команду TortoiseSVNФиксировать. Появится диалог фиксации со списком изменённых файлов и напротив каждого будет галочка. Вы можете выбрать лишь несколько файлов из списка для фиксации, но в нашем случае мы будем фиксировать изменения в обоих файлах. Введите сообщение с описанием сделанных изменений и нажмите OK. Появится диалог с прогрессом процесса фиксации файлов в хранилище и мы закончили фиксацию.

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

Во время работы над проектом, вам понадобится добавлять новые файлы - предположим вы добавили новые функции в файле Экстра.c и добавили справку в существующем файле Создатьфайл. Нажмите правой кнопкой на папке и выберите команду TortoiseSVNДобавить. Диалог добавления показывает все неверсированные файлы и вы можете выбрать те файлы, которые вы хотите добавить. Другой способ добавления файлов - это нажать правой кнопкой на самом файле и выбрать команду TortoiseSVNДобавить.

Теперь, если вы откроете папку для фиксации, новый файл будет отображаться как Добавлен и существующий файл как Изменён. Обратите внимание, что вы можете дважды нажать на изменённый файл, чтобы просмотреть какие именно изменения были сделаны.

Просмотр истории проекта

Одной из самых полезных функций TortoiseSVN является диалоговое окно журнала. Оно показывает список всех фиксаций изменений в файле или папке, а также все подробные сообщения, которые вы вводили при фиксации изменений (вы же ввели сообщение фиксации как вам советовали? Если нет, то сейчас вы видите почему это важно).

Рисунок 1.4. Диалоговое окно журнала

Диалоговое окно журнала


Ладно, тут я немного схитрил и взял снимок экрана из хранилища TortoiseSVN.

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

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

Отмена изменений

Одной общей функцией всех систем управления ревизиями является функция, которая позволяет вам отменить изменения, которые вы внесли ранее. Как вы и догадались, в TortoiseSVN это легко сделать.

Если вы хотите избавиться от изменений, которые вы еще не успели фиксировать и восстановить нужный файл в том виде, в котором он был перед началом изменений, то выберите команду TortoiseSVNУбрать изменения. Это действие отменит ваши изменения (в Корзину) и вернет фиксированную версию файла, с которой вы начинали. Если же вы хотите убрать лишь некоторых изменения, то вы можете использовать инструмент TortoiseMerge для просмотра изменений и выборочного удаления измененных строк.

Если вы хотите отменить действия определённой ревизии, то начните с диалогового окна журнала и найдите проблемную ревизию. Выберите команду Контекстное менюОтменить изменения из этой ревизии и те изменения будут отменены.

Далее ...

Это руководство кратко ознакомило вас с самыми важными и полезными функциями TortoiseSVN, но, конечно, есть еще много чего с чем мы вас не познакомили. Мы очень рекомендуем вам посвятить часть своего времени, чтобы прочесть данное руководство до конца, особенно Глава 4, Руководство по ежедневному использованию, которая содержит более подробную информацию об операциях для ежедневного использования.

Нам пришлось сильно потрудиться, чтобы сделать это руководство информативным и удобочитаемым, но мы признаём, что есть ещё много чего рассказать! Запаситесь временем и не бойтесь пробовать всё на тестовом хранилище по мере продвижения вперёд. Лучший способ изучить что-то - это использовать это!

Глава 2. Основные понятия управления версиями

Эта глава - слегка изменённая версия такой же главы из книги о Subversion. Онлайн версия книги о Subversion доступна по адресу http://svnbook.red-bean.com/.

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

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

Хранилище

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

Рисунок 2.1. Типичная система Клиент/Сервер

Типичная система Клиент/Сервер

Но чем эта система отличается от обычного файлового сервера? И действительно, хранилище является разновидностью файлового сервера, однако не совсем обычного. Что делает хранилище Subversion особенным - это то, что он запоминает каждое внесённое изменение, когда-либо записанное в него: любое изменение любого файла, и даже изменения в самом дереве каталогов, такие как добавление, удаление и перемещение файлов и каталогов.

Когда клиент просто читает данные из хранилища, он получает последнюю версию дерева файловой системы. Но, помимо этого, клиент имеет возможность посмотреть предыдущие состояния файловой системы. Например, клиенту интересно, «Что содержал эта папка в прошлый вторник? » или «Кто последним изменил этот файл и какие изменения внес? » Вопросы подобного типа являются основными для любой системы управления версиями: системы, разработанной для записи и отслеживания изменений данных во времени.

Модели версирования

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

Проблема совместного использования файлов

Предположим такую ситуацию: в компании есть два сотрудника, работающие над одним проектом: Игорь и Света. Они одновременно решили поправить один и тот же файл. Если Игорь сохранит свои изменения первым, тогда Света (сохранившись несколькими секундами позже) может непреднамеренно их переписать своей новой версией файла. Несмотря на то, что версия Игоря не будет потеряна навсегда (потому что система запоминает все изменения), внесённых Игорем правок не будет в новой версии файла Светы, ведь она их никогда не видела. Работа Игоря фактически потеряна - или, по крайней мере, отсутствует в последней версии файла. А это как раз то, чего мы хотим избежать!

Рисунок 2.2. Проблема потери изменений

Проблема потери изменений

Модель Блокирование-Изменение-Разблокирование

Многие системы управления версиями разрешают эту проблему использованием простой модели блокирование-изменение-разблокирование. В такой системе хранилище разрешает вносить изменения в файл только одному человеку за раз. До того, как Игорь сможет внести изменения в файл, он должен сначала его заблокировать. Блокирование файла подобно взятию книги в библиотеке: если Игорь заблокировал файл, Света не сможет изменить его - хранилище отклонит запрос на блокировку файла. Всё, что она сможет - прочитать файл и ждать, пока Игорь закончит свою работу и снимет блокировку. После того, как Игорь разблокирует файл, Света сможет заблокировать его и внести свои изменения.

Рисунок 2.3. Модель Блокирование-Изменение-Разблокирование

Модель Блокирование-Изменение-Разблокирование

Проблема с моделью блокирование-изменение-разблокирование в ее жестокости, она может создать следующие неудобства пользователям:

  • Блокирование может вызвать административные проблемы. Иногда Игорь, заблокировав файл, забывает об этом. Между тем, поскольку Света всё ещё ждёт, когда она сможет приступить к редактированию файла, её руки связаны. А потом Игорь уходит в отпуск. Теперь Света для снятия блокировки Игоря должна обратиться к администратору. Ситуация приводит к ненужной потере времени.

  • Блокирование может вызвать излишнюю поочерёдность. Что, если Игорь редактирует начало большого файла, а Света хочет подправить конец? Эти изменения вообще не пересекаются. Они могли бы легко работать одновременно и никакого вреда это бы не принесло (предполагая корректное слияние изменений).

  • Блокирование может вызвать ложное чувство безопасности. Предположим, что Игорь заблокировал и редактирует файл А, в то время, как Света заблокировала и редактирует файл Б. Но допустим, что А и Б зависят друг от друга и изменения сделанные в каждом не совместимы. Внезапно А и Б перестают вместе работать. Блокирующая система бессильна в предотвращении проблемы - вместо этого она обеспечила ложное чувство безопасности. Игорь со Светой запросто могут решить, что, блокируя свой файл, каждый начинает безопасную изолированную задачу и это препятствует заблаговременному обсуждению их несовместимых изменений.

Модель Копирование-Изменение-Слияние

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

Вот пример: Игорь и Света создали свои рабочие копии одного и того же проекта. Они работают одновременно, и вносят изменения в файл A в своих рабочих копиях. Света первой сохраняет свои изменения в хранилище. Затем, когда Игорь пытается сохранить свои, хранилище информирует его, что его файл А устарел. Другими словами, файл А в хранилище был изменён с тех пор, как Игорь получил его. Тогда Игорь выполняет слияние (merge) любых изменений хранилища со своей рабочей копией. Вероятно, что изменения Светы не пересекаются с его собственными, и, поскольку теперь его рабочая копия содержит оба набора изменений, он записывает её обратно в хранилище.

Рисунок 2.4. Модель Копирование-Изменение-Слияние

Модель Копирование-Изменение-Слияние

Рисунок 2.5. ...Копирование-Изменение-Слияние. Продолжение

...Копирование-Изменение-Слияние. Продолжение

Но что будет, если изменения Светы всё-таки пересекаются с изменениями Игоря? Что происходит в этом случае? Эта ситуация, называемая конфликтом, обычно не такая уж большая проблема. Когда Игорь просит объединить свои изменения с изменениями из хранилища, его копия файла А помечается как находящаяся в состоянии конфликта: он видит оба набора конфликтующих изменений, и вручную выбирает между ними. Обратите внимание, программа не может автоматически разрешать конфликты, только человек способен понять и сделать необходимый осмысленный выбор. Когда Игорь разрешит пересекающиеся изменения (возможно, путём обсуждения со Светой!), он может безопасно сохранить объединённый файл обратно в хранилище.

Модель копирование-изменение-слияние может выглядеть немного беспорядочно, но на практике все работает гладко. Пользователи могут работать одновременно, не тратя время на ожидание других. Обычно оказывается, что большинство одновременно вносимых изменений в файл вообще не пересекается; конфликты бывают редко. И время, потраченное на их разрешение, значительно меньше времени, отнимаемого блокировками системы.

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

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

Что же делает Subversion?

По умолчанию Subversion использует модель копирование-изменение-слияние, и в большинстве случаев это всё, что вам нужно. Однако, начиная с версии 1.2, Subversion также поддерживает блокирование файлов, так что если у вас есть необъединяемые файлы, или если руководство просто вынудило вас работать в режиме с блокировками, Subversion предоставляет вам такую возможность.

Subversion в действии

Рабочие копии

Вы уже читали о рабочих копиях, сейчас мы покажем, как клиент Subversion их создаёт и использует.

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

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

Рабочая копия содержит несколько дополнительных файлов, созданных и поддерживаемых клиентом Subversion, чтобы помочь ему в работе. Например, ваша рабочая копия содержит подпапку .svn - административную папку рабочей копии. Файлы в этой папке помогают svn-клиенту распознать, какие файлы содержат неопубликованные изменения, а какие устарели. До версии 1.7 Subversion создавал административные папки .svn в каждой подпапке вашей рабочей копии. Subversion 1.7 использует совершенно другой подход. Теперь каждая рабочая копия содержит только одну административную папку в корне рабочей директории.

Типичное хранилище Subversion часто содержит файлы (или исходный код) нескольких проектов, обычно каждый проект - это подпапка в дереве файловой системы хранилища. При таком подходе, пользовательская рабочая копия будет соответствовать какому-то поддереву в хранилище.

Например, предположим, что у вас есть хранилище с двумя программными проектами.

Рисунок 2.6. Файловая система хранилища

Файловая система хранилища

Другими словами, корневая папка хранилища содержит две папки: paint и calc.

Для получения рабочей копии, вы должны извлечь некоторое поддерево хранилища. (Термин извлечение (check out) по-английски может звучать как что-то, связанное с блокированием или резервированием ресурсов, но это не так: оно просто создаёт для вас личную копию проекта).

Предположим, вы вносите изменения в button.c. Так как в папке .svn запоминается дата модификации файла и исходное содержимое, Subversion может узнать, что вы изменили файл. Однако, Subversion не делает ваши изменения доступными другим, пока вы явно не скажете ей об этом. Действие по опубликованию ваших изменений, обычно известно как фиксация (или внесение) изменений в хранилище.

Для обнародования ваших изменений, вы должны использовать команду Subversion фиксировать (commit).

Теперь ваши изменения в button.c были зафиксированы в хранилище; если другой пользователь извлечёт рабочую копию /calc, он увидит ваши изменения в последней версии файла.

Предположим, вы работаете вместе с Салли, которая извлекла рабочую копию /calc в то же время, что и вы. Когда вы фиксируете ваши изменения в button.c, рабочая копия Салли остаётся неизменной, Subversion изменяет рабочие копии только по запросу пользователя.

Для приведения своего проекта в актуальное состояние, Салли может попросить Subversion обновить её рабочую копию, используя команду обновить (update). В результате, в её рабочую копию будут внесены как ваши изменения, так и изменения других, зафиксированные с момента извлечения Салли своей рабочей копии.

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

Адреса URL хранилища

Хранилища Subversion могут быть доступны посредством множества различных методов - с локального диска или через различные сетевые протоколы. Описание расположения хранилища, однако, всегда является разновидностью URL. Схема URL показывает метод доступа:

Таблица 2.1. URL для доступа к хранилищу

СхемаМетод доступа
file:// Прямой доступ к хранилищу на локальном или сетевом диске.
http:// Доступ через протокол WebDAV к Subversion, работающем на сервере Apache.
https:// Тоже самое, что и http://, но с шифрованием SSL
svn:// Не аутентифицируемый TCP/IP доступ через собственный протокол к серверу svnserve.
svn+ssh:// Аутентифицируемый, зашифрованный TCP/IP доступ через собственный протокол к серверу svnserve.

В большинстве случаев, для URL в Subversion используется стандартный синтаксис, позволяющий указывать имя сервера и номер порта в URL. Метод доступа file:// обычно используется для локального доступа, хотя он может быть использован с путями UNC для доступа к узлам по сети. В этом случае URL имеет форму file://имя-компьютера/путь/к/хранилищу. Для локальной машины часть имя-компьютера должна быть либо пропущена, либо указана как localhost. По этой причине, локальные пути обычно указывают с тремя косыми чертами (/), file:///путь/к/хранилищу.

Также, пользователи схемы file:// на платформе Windows вынуждены использовать неофициальный «стандарт» синтаксиса для доступа к хранилищам, находящимся на той же машине, но на дисках, отличных от текущего рабочего диска пользователя. Будет работать любой из двух приведённых ниже синтаксиса путей URL (X обозначает диск, на котором находится хранилище):

file:///X:/path/to/repos
...
file:///X|/path/to/repos
...
      

Обратите внимание, в URL используется обычная (прямая) косая черта, хотя в исходной (не URL) форме путей в Windows используется обратная косая черта.

Вы можете получить доступ к хранилищу FSFS через сетевой ресурс, но это не рекомендовано по разным причинам:

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

  • Не все протоколы для общего доступа к файлам по сети поддерживают блокировку, которую требует Subversion. Однажды вы обнаружите, что ваше хранилище слегка повреждено.

  • Вы должны настроить разрешения на доступ именно так, как нужно. SAMBA особенно сложен в этом отношении.

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

Ревизии

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

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

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

Удачный способ мысленного представления хранилища - представить его в виде серии деревьев. Вообразите массив номеров ревизий, начинающийся с 0, и растущий слева направо. Под каждым номером ревизии расположено дерево файловой системы, и каждое дерево - это «снимок» состояния хранилища после каждой фиксации.

Рисунок 2.7. Хранилище

Хранилище

Важно помнить то, что рабочие копии не всегда соответствуют какой-то одной ревизии в хранилище; они могут содержать файлы из разных ревизий. Например, вы извлекли рабочую копию из хранилища, в котором самая последняя ревизия имеет номер 4:

calc/Makefile:4
integer.c:4
button.c:4
      

На данный момент рабочая папка полностью соответствует ревизии 4 в хранилище. Допустим, что вы внесли изменения в button.c, и зафиксировали эти изменения. При отсутствии других фиксаций ваша фиксация создаст ревизию под номером 5, и теперь ваша рабочая копия выглядит следующим образом:

calc/Makefile:4
integer.c:4
button.c:5
      

Предположим, что после этого Салли фиксирует изменения в integer.c, создавая ревизию 6. Если вы воспользуетесь svn update для приведения своей рабочей копии в актуальное состояние, то она станет выглядеть так:

calc/Makefile:6
integer.c:6
button.c:6
      

Изменения, внесенные Салли в integer.c, будут отражены в вашей рабочей копии, также как и ваши изменения будут присутствовать в button.c. В этом примере текст Makefile в ревизиях 4, 5 и 6 идентичен, однако, Subversion всё равно присваивает файлу Makefile в вашей рабочей копии номер ревизии 6, чтобы показать, что файл в актуальном состоянии. Таким образом, после того как вы выполните полное обновление вашей рабочей копии, она будет соответствовать точно одной ревизии в хранилище.

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

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

  • на какой ревизии основан ваш рабочий файл (это называется рабочая ревизия файла), и

  • дату и время, когда локальная копия последний раз обновлялась из хранилища.

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

Не изменялся и не устарел

Файл не изменялся в рабочей папке, и в хранилище не фиксировались изменения этого файла со времени его рабочей ревизии. Команды фиксировать (commit) и обновить (update) ничего делать не будут.

Изменён локально и не устарел

Файл был изменён в рабочей папке, и в хранилище не фиксировались изменения этого файла со времени его базовой ревизии. Существующие локальные изменения не были зафиксированы в хранилище, поэтому команда фиксировать (commit) для файла преуспеет в опубликовании ваших изменений, а команда обновить (update) ничего делать не будет.

Не изменялся и устарел

Файл в рабочей папке не изменялся, но был изменён в хранилище. Со временем, файл должен быть обновлён для соответствия текущей публичной ревизии. Команда фиксировать (commit) ничего делать не будет, а команда обновить (update) внесёт последние изменения в вашу рабочую копию.

Изменён локально и устарел

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

Подводя итоги

В этой главе мы рассмотрели несколько основных понятий Subversion:

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

  • Мы рассмотрели на нескольких простых примерах, как при помощи Subversion два сотрудника могут публиковать и получать изменения, сделанные друг другом, используя модель "копирование-изменение-слияние".

  • Мы немного поговорили о том, как Subversion отслеживает изменения и управляет информацией в рабочей копии.

Глава 3. Хранилище

Каким бы протоколом вы ни пользовались для доступа к своим хранилищам, вам в любом случае потребуется создать хотя бы одно хранилище. Это может быть сделано как при помощи клиента Subversion для командной строки, так и при помощи TortoiseSVN.

Если вы ещё не создали хранилище Subversion, самое время этим заняться.

Создание хранилища

Создание хранилища при помощи клиента командной строки

  1. Создайте пустую папку с именем SVN, (например, D:\SVN\), которая будет корневой папкой для всех ваших хранилищ.

  2. Создайте другую папку MyNewRepository внутри D:\SVN\.

  3. Откройте командную строку (или окно эмуляции DOS), перейдите в D:\SVN\ и введите

    svnadmin create --fs-type fsfs MyNewRepository
    

Теперь у вас есть новое хранилище, расположенное в D:\SVN\MyNewRepository.

Создание хранилища при помощи TortoiseSVN

Рисунок 3.1. Меню TortoiseSVN для неверсированных папок

Меню TortoiseSVN для неверсированных папок

  1. Откройте Проводник Windows

  2. Создайте новую папку и назовите её, например, SVNRepository

  3. Щёлкните правой кнопкой мыши на вновь созданной папке, и выберите TortoiseSVNСоздать здесь хранилище....

    Хранилище будет создано внутри новой папки. Не редактируйте эти файлы самостоятельно!!!. В случае возникновения ошибок убедитесь, что папка пуста и доступна для записи.

    У вас также спросят хотите ли вы создать структуру директорий внутри хранилища. О возможных вариантах структуры узнайте в «Организация данных в хранилище».

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

Подсказка

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

Локальный доступ к хранилищу

Для доступа к вашему локальному хранилищу вам необходим путь к этой папке. Только запомните, что Subversion принимает все пути к хранилищам в виде file:///C:/хранилищеSVN/. Обратите внимание, что везде используется прямая косая черта.

Для доступа к хранилищу, находящемуся на сетевом разделяемом ресурсе, вы можете подключить этот ресурс как диск, или использовать путь UNC. Пути UNC используются в виде file://ИмяСервера/путь/к/хранилищу. Обратите внимание, что здесь только 2 ведуших прямых косых черты.

В версиях SVN до 1.2, пути UNC имели более запутанный вид file:///\ИмяСервера/путь/к/хранилищу. Хотя этот вид до сих пор поддерживается, использовать его не рекомендуется.

Доступ к хранилищу на сетевом ресурсе

Хотя в теории возможно разместить хранилище FSFS на сетевом ресурсе и предоставить доступ нескольким пользователям посредством протокола file://, это то, что совершенно точно не рекомендуется делать. На самом деле мы весьма не одобряем этого, и не поддерживаем такое использование по разным причинам:

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

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

  • В-третьих, разрешения на доступ к файлам должны указываться очень аккуратно. Возможно, вам удастся это сделать на "родном" разделяемом ресурсе Windows, но на SAMBA это особенно трудно.

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

Доступ при помощи file:// предназначен только для локального использования одним пользователем, особенно для тестирования и отладки. Когда вы желаете предоставить общий доступ к хранилищу, вам на самом деле необходимо настроить подходящий сервер, и это не настолько сложно, как вы можете подумать. Прочтите «Доступ к хранилищу» для рекомендаций по выбору и настройке сервера.

Организация данных в хранилище

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

Есть несколько стандартных рекомендуемых способов организации хранилища. Большинство людей создают папку trunk, в которой ведётся «основная линия» разработки, папку branches, содержащую копии ответвлений, и папку tags для копий меток. Если хранилище содержит только один проект, тогда их часто создают как папки верхнего уровня:

/trunk
/branches
/tags
    

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

Если хранилище содержит несколько проектов, их часто упорядочивают по ответвлениям:

/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc
    

...или по проектам:

/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags
    

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

В случае принятия подхода, когда /trunk /tags /branches - папки верхнего уровня, незачем говорить, что для каждого ответвления и метки копируется весь ствол, и в некотором роде эта структура предоставляет наибольшую гибкость.

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

Конечно, вы вольны игнорировать эти обычные схемы. Вы можете реализовать любые виды изменений - всё, что лучше работает для вас или для вашей команды. Помните, что выбранный вами вариант не является чем-то незыблемым. Вы можете реорганизовать хранилище в любое время. Поскольку ответвления и метки - это обычные папки, TortoiseSVN может перемещать или переименовывать их, как вы пожелаете.

Переход с одного способа организации на другой - это вопрос выполнения серии перемещений на сервере. Если вам не нравится, как организованы данные в хранилище, просто переставьте папки.

Итак, если вы пока ещё не создали основную структуру папок в вашем хранилище, это надо сделать сейчас. Есть два способа этого достичь: если вы просто желаете создать структуру /trunk /tags /branches (/ствол /метки /ответвления), вы можете воспользоваться обозревателем хранилища для создания этих трёх папок (за три отдельных фиксации). Если же вы желаете создать более разветвлённую иерархию, то проще сначала создать структуру папок на диске и импортировать её за одну фиксацию, вот так:

  1. Создайте новую пустую папку на вашем жёстком диске

  2. Создайте желаемую структуру папок верхнего уровня внутри этой папки - но пока не помещайте в них никаких файлов!

  3. Импортируйте эту структуру в хранилище путём правого щелчка на папке и выбора TortoiseSVNИмпортировать.... В диалоге импорта укажите путь к вашему хранилищу и щелкните ОК. Тем самым вы импортируете вашу временную папку в корень хранилища и создадите основу для организации данных хранилища.

Обратите внимание: сама папка, которую вы импортируете, в хранилище не появляется, только её содержимое. Например, создайте следующую структуру папок:

C:\Temp\New\trunk
C:\Temp\New\branches
C:\Temp\New\tags
      

Импортируйте C:\Temp\New в корень хранилища, который станет выглядеть следующим образом:

/trunk
/branches
/tags
      

Резервирование хранилища

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

Наиболее простой (но не рекомендуемый) способ - скопировать каталог хранилища на резервный носитель. При этом вы должны быть полностью уверены, что ни один процесс не имеет доступа к данным. Под доступом подразумевается любой доступ вообще. Если во время копирования к вашему хранилищу имеет доступ какой-либо процесс (остался открытым веб-браузер, WebSVN и др.), то резервное копирование станет бессмысленным.

Для создания копии вашего хранилища безопасным способом рекомендуется выполнить

svnadmin hotcopy путь/к/хранилищу путь/к/резервной/копии

После этого резервная копия будет готова.

The svnadmin tool is installed automatically when you install the Subversion command line client. The easiest way to get this is to check the option to include the command line tools when installing TortoiseSVN, but if you prefer you can download the latest version of command line tools directly from the Subversion website.

Скрипты ловушек, выполняемые на стороне сервера

Ловушка - это программа, запускаемая по какому-либо событию в хранилище, такому как создание новой ревизии или изменение неверсированного свойства. Каждой ловушке передаётся достаточно информации для того, чтобы узнать, что это за событие, какие объекты затронуты, а также имя пользователя, инициировавшего событие. В зависимости от вывода или возвращаемого значения ловушки, программа ловушки может продолжить действие, прекратить его, или приостановить некоторым образом. За дополнительной информацией о реализованных ловушках обращайтесь, пожалуйста, к главе Hook Scripts (Скрипты ловушек) в книге о Subversion.

Эти скрипты ловушек выполняются сервером, на котором расположено хранилище. TortoiseSVN также позволяет настроить скрипты ловушек, выполняемые локально клиентом при наступлении определённых событий. Для получения дополнительной информации смотрите «Скрипты ловушек, выполняемые на стороне клиента».

Примеры скриптов ловушек вы можете найти в папке hooks хранилища. Эти скрипты подходят для серверов Unix/Linux, но они должны быть модифицированы, если у вас Windows-сервер. Ловушка может быть как пакетным, так и исполняемым файлом. Пример ниже показывает пакетный файл, который может быть использован для реализации ловушки pre-revprop-change (перед-изменением-свойства_ревизии).

rem Only allow log messages to be changed.
rem Допускать изменения только сообщений журнала.
if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1
    

Заметьте, что всё, посылаемое в stdout, отбрасывается. Если вы желаете, чтобы в диалоге 'Фиксация отклонена' появилось сообщение, вам надо послать его в stderr. В пакетном файле это достигается при помощи >&2

Переопределение ловушек

Если скрипт ловушек отклоняет вашу фиксацию, то его решение окончательно. Но вы можете создать механизм переопределения внутри самого скрипта используя технику Волшебное Слово. Если скрипт хочет отклонить операцию, то он сначала ищет в сообщении журнала специальную фразу, либо заданную фразу, либо имя файла с префиксом. Если он находит волшебное слово, то поволяет фиксации выполнится. Если фраза не найдена, то он может блокировать фиксацию с сообщением «You didn't say the magic word». :-)

Ссылки для извлечения

Если вы желаете сделать своё хранилище Subversion доступным для других, вы можете разместить ссылку на него на вашем веб-сайте. Один из путей достижения большей доступности - размещение ссылки для извлечения для других пользователей TortoiseSVN.

При установке TortoiseSVN регистрируется новый протокол tsvn:. Когда пользователи TortoiseSVN щёлкают по такой ссылке, автоматически открывается диалог извлечения с уже заполненным URL-адресом хранилища.

Для размещения таких ссылок на вашей собственной HTML-странице необходимо добавить код вроде этого:

<a href="tsvn:http://project.domain.org/svn/trunk">
</a>

Of course it would look even better if you included a suitable picture. You can use the TortoiseSVN logo or you can provide your own image.

<a href="tsvn:http://project.domain.org/svn/trunk">
<img src=TortoiseCheckout.png></a>

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

<a href="tsvn:http://project.domain.org/svn/trunk?100">
</a>

Доступ к хранилищу

Для использования TortoiseSVN (или любого другого клиента Subversion) вам необходимо место, где будут располагаться хранилища. Вы можете содержать ваши хранилища локально и обращаться к ним, используя протокол file://, или же вы можете разместить их на сервере и получать доступ к ним посредством протоколов http:// или svn://. Оба этих протокола для работы с сервером могут ещё и шифроваться, в этом случае это будут протоколы https:// или svn+ssh://, или же вы можете воспользоваться svn:// с SASL.

If you are using a public hosting service such as SourceForge or your server has already been setup by someone else then there is nothing else you need to do. Move along to Глава 4, Руководство по ежедневному использованию.

Если у вас нет сервера и вы работаете в одиночку, или если вы только оцениваете Subversion и TortoiseSVN самостоятельно,тогда локальные хранилища, вероятно, будут лучшим выбором. Просто создайте хранилище на вашем собственном ПК, как описано ранее в Глава 3, Хранилище. Вы можете пропустить остаток этой главы и сразу перейти к Глава 4, Руководство по ежедневному использованию, чтобы узнать, как приступить к их использованию.

Если вы думаете разместить многопользовательское хранилище на сетевом ресурсе, подумайте ещё раз. Чтобы узнать, почему мы считаем, что это плохая идея, прочтите «Доступ к хранилищу на сетевом ресурсе». Установка и настройка сервера не так трудна, как кажется, и предоставит вам как большую надёжность, так и, вероятно, большую скорость.

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

In the early days of Subversion, setting up a server required a good understanding of server configuration and in previous versions of this manual we included detailed descriptions of how to set up a server. Since then things have become easier as there are now several pre-packaged server installers available which guide you through the setup and configuration process. These links are for some of the installers we know about:

You can always find the latest links on the Subversion website.

You can find further How To guides on the TortoiseSVN website.

Глава 4. Руководство по ежедневному использованию

Содержание

Основные Возможности
Пометки на значках
Контекстные меню
Перетаскивание мышью
Общие клавиатурные сокращения
Аутентификация
Разворачивание окон
Импорт данных в хранилище
Импорт
Импорт на месте
Особые файлы
Извлечение рабочей копии
Глубина извлечения
Фиксация ваших изменений в хранилище
Диалог фиксации
Группы изменений
Фиксировать только части файлов
Исключение элементов из списка для фиксации
Сообщения журнала при фиксации
Ход выполнения фиксации
Обновление вашей рабочей копии путём внесения изменений, которые сделаны другими
Улаживание конфликтов
Конфликты файлов
Конфликт свойств
Конфликты деревьев
Получение информации о статусе
Пометки на значках
Подробный статус
Локальный и удалённый статус
Просмотр различий
Группы изменений
Shelving
Диалоговое окно журнала ревизий
Вызов диалога журнала ревизий
Действия в журнале ревизий
Получение дополнительной информации
Получение большего количества сообщений журнала
Текущая ревизия рабочей копии
Возможности по отслеживанию слияний
Изменение сообщения журнала и автора
Фильтрация сообщений журнала
Статистическая информация
Автономный режим
Обновление вида
Просмотр различий
Различия в файлах
Параметры сравнения завершений строк и непечатаемых знаков
Сравнение папок
Сравнение картинок при помощи TortoiseIDiff
Сравнение докуменов формата Office
Внешние инструменты просмотра различий/слияния
Добавление новых файлов и папок
Копирование/перемещение/переименование файлов и папок
Игнорирование файлов и папок
Сопоставление шаблону в списках игнорирования
Удаление, перемещение и переименование
Удаление файлов и папок
Перемещение файлов и папок
Как справиться с конфликтами из-за регистра символов в именах файлов
Исправление переименования файлов
Удаление неверсированных файлов
Отмена изменений
Очистка
Установки проекта
Свойства Subversion
Свойства проекта в TortoiseSVN
Свойства
Внешние включения
Внешние папки
Внешние файлы
Создание внешних включений с помощью перетаскивания (drag-and-drop)
Ответвления и метки
Создание ответвления или метки
Другие способы создания ответвления или метки
Извлечь? Или переключиться?..
Слияние
Слияние с диапазоном ревизий
Слияние двух различных деревьев
Параметры слияния
Просмотр результатов слияния
Отслеживание слияний
Обработка конфликтов после слияния
Сопровождение ответвления разработки новой возможности
Блокирование
Как работает блокировка в Subversion
Получение блокировки
Снятие блокировки
Проверка состояния блокировки
Незаблокированные файлы, доступные только-для-чтения
Скрипты ловушек на события блокировки
Создание и применение заплаток
Создание файла заплатки
Применение файла заплатки
Кто какую строку изменил?
Авторство для файлов
Авторство различий
Обозреватель хранилища
Графы ревизий
Узлы графа ревизий
Изменение вида
Использование графа
Обновление вида
Подрезка деревьев
Экспорт рабочей копии Subversion
Выведение рабочей копии из-под управления версиями
Перебазирование рабочей копии
Интеграция с системами отслеживания ошибок/проблем
Добавление номеров проблем к сообщениям журнала
Получение информации из системы отслеживания проблем
Интеграция со средствами просмотра хранилища, работающими через веб-интерфейс
Настройки TortoiseSVN
Общие настройки
Настройки графа ревизий
Настройки пометок на значках
Настройки сети
Настройки внешних программ
Настройки сохранённых данных
Кэширование журнала
Скрипты ловушек, выполняемые на стороне клиента
Настройки TortoiseBlame
Настройки TortoiseUDiff
Экспортировать TSVN настройки
Дополнительные настройки
Последний шаг

В этом документе описано использование TortoiseSVN, как оно происходит изо дня в день. Это не введение в системы управления версиями, и не введение в Subversion (SVN). Эта глава более похожа на то, к чему вы можете обратиться, когда вы приблизительно знаете, что нужно сделать, но не помните точно, как это делается.

Если вам нужно введение в управление версиями с использованием Subversion, тогда мы рекомендуем прочитать чудесную книгу[1]: Управление версиями в Subversion.

Работа над этим документом продолжается, также как и над TortoiseSVN и Subversion. Если вы нашли какие-нибудь ошибки, пожалуйста, сообщите о них в список рассылки, чтобы мы могли обновить документацию. Некоторые копии экранов в Руководстве по ежедневному использованию могут не соответствовать текущему состоянию программы. Пожалуйста, простите нас: мы работаем над TortoiseSVN в своё свободное время.

Для того, чтобы получить максимальную пользу от Руководства по ежедневному использованию:

  • У вас уже должен быть установлен TortoiseSVN.

  • Вы должны быть знакомы с системами управления версиями.

  • Вы должны знать основы Subversion.

  • Вы должны установить и настроить сервер и/или иметь доступ к хранилищу Subversion.

Основные Возможности

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

Пометки на значках

Рисунок 4.1. Проводник с пометками на значках

Проводник с пометками на значках


Одной из наиболее заметных особенностей TortoiseSVN являются пометки на значках, которые появляются для файлов в рабочей копии. Они сразу же показывают, какие файлы были изменены. Что обозначают различные пометки, можно посмотреть в «Пометки на значках».

Контекстные меню

Рисунок 4.2. Контекстное меню для папки, находящейся под управлением версиями

Контекстное меню для папки, находящейся под управлением версиями


Все команды TortoiseSVN вызываются из контекстного меню Проводника Windows. Большинство из них видно непосредственно, когда вы щелкаете правой клавишей мыши на файле или папке. Список доступных команд зависит от того, находятся ли файл, папка или их родительская папка под управлением версиями, или нет. Вы также можете увидеть меню TortoiseSVN как часть меню "Файл" Проводника.

Подсказка

Некоторые редко используемые команды доступны только в расширенном контекстном меню. Для вызова расширенного контекстного меню нажмите и держите клавишу Shift при правом щелчке мыши.

В некоторых случаях вы можете видеть в меню несколько пунктов TortoiseSVN. Это не ошибка!

Рисунок 4.3. Меню "Файл" Проводника для ярлыка в версированной папке

Меню "Файл" Проводника для ярлыка в версированной папке


Этот пример для неверсированного ярлыка внутри версированной папки, и меню "Файл" Проводника содержит три вхождения TortoiseSVN. Одно из них для папки, одно для ярлыка и одно для объекта, на который указывает ярлык. Для того, чтобы можно было отличить их друг от друга, значки имеют пометку в нижнем правом углу, показывающую, к какому объекту относится это вхождение меню: к файлу, к папке, к ярлыку или к нескольким выделенным элементам.

Перетаскивание мышью

Рисунок 4.4. Меню при перетаскивании правой клавишей мыши для папки под управлением версиями

Меню при перетаскивании правой клавишей мыши для папки под управлением версиями


Другие команды становятся доступны как возможные варианты действий (обработчики перетаскивания) при перетаскивании правой клавишей мыши файлов или папок на новое место внутри рабочей копии, или при перетаскивании правой клавишей неверсированных файлов или папок в какую-либо папку, находящуюся под управлением версиями.

Общие клавиатурные сокращения

У некоторых общих операций есть хорошо известные клавиатурные сокращения Windows, но они не появляются на кнопках или в меню. Если у вас не получается выполнить что-то очевидное, вроде обновления вида, посмотрите здесь.

F1

Конечно же, справка

F5

Обновление текущего вида. Это, наверное, одна из самых полезных одноклавишных команд. Например: в Проводнике она обновляет пометки на значках в вашей рабочей копии; в диалоге фиксации она перепросматривает рабочую копию для обнаружения того, что ещё можно зафиксировать; в диалоге 'Журнал ревизий' она вновь связывается с хранилищем для проверки последних изменений.

Ctrl-A

Выделить все. Она может быть использована, если вы получили сообщение об ошибке, и желаете скопировать его и вставить в письмо электронной почты. Используйте Ctrl-A для выбора сообщения об ошибке, а затем ...

Ctrl-C

Скопировать выбранный текст. В случае если текст не выбран, но выбран, например, элемент списка или окно сообщения, то содержимое элемента или окна копируется в буфер обмена.

Аутентификация

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

Рисунок 4.5. Диалог аутентификации

Диалог аутентификации


Введите ваше имя пользователя и пароль. При помощи флажка можно сделать так, чтобы эти данные сохранялись TortoiseSVN в папке по умолчанию Subversion: %APPDATA%\Subversion\auth в трёх подпапках:

  • svn.simple содержит учётные данные для базовой аутентификации (имя пользователя/пароль). Обратите внимание: эти пароли хранятся при помощи WinCrypt API, а не в виде простого текста.

  • svn.ssl.server содержит серверные сертификаты SSL.

  • svn.username содержит учётные данные для аутентификации только по имени пользователя (без пароля).

Очистить кэш аутентификации можно со страницы Сохранённые данные диалога настроек TortoiseSVN. Кнопка Очистить всё очистит все закэшированные данные аутентификации для всех хранилищ. Кнопка Очистить... тем не менее покажет диалог, в котором вы можете выбрать какие закэшированные данные аутентификации должны быть удалены. Смотрите «Настройки сохранённых данных ».

Некоторым людям хочется, чтобы данные об аутентификации удалялись когда они выходят из Windows или при выключении. Это можно сделать с помощью скрипта выключения удалив директорию %APPDATA%\Subversion\auth. Например:

@echo off
rmdir /s /q "%APPDATA%\Subversion\auth"
      

Описание того как установить такие скрипты вы можете найти в http://www.windows-help-central.com/windows-shutdown-script.html.

За более полной информацией о том, как настроить ваш сервер для аутентификации и управления доступом, обращайтесь к «Доступ к хранилищу»

Разворачивание окон

Многим диалогам TortoiseSVN необходимо показывать большой объём информации, но довольно часто бывает полезно развернуть окно только по высоте, или только по ширине, вместо того, чтобы разворачивать его на весь экран. Для удобства эти функции реализованы путём быстрого вызова через стандартную кнопку Развернуть. Щёлкните по ней средней кнопкой мыши для разворачивания по вертикали, и правой кнопкой - для разворачивания по горизонтали.

Импорт данных в хранилище

Импорт

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

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

  • Нет способа выбрать включаемые файлы и папки, кроме как применяя настройки глобального исключения.

  • Импортированная папка не становится рабочей копией. Вы должны выполнить извлечение для копирования файлов обратно с сервера.

  • Можно легко импортировать совсем на не тот уровень папок в хранилище.

По этим причинам мы не рекомендуем вам использовать команду импорта вообще, а вместо этого лучше воспользоваться двухшаговым методом описанным в «Импорт на месте», кроме тех случаев, когда вы создаете простейшую начальную структуру /trunk /tags /branches в своем хранилище. Раз уж вы здесь, то вот как работает простейший импорт ...

Перед тем, как вы импортируете ваш проект в хранилище, вам следует:

  1. Удалить все файлы, которые не нужны для сборки проекта (временные и создаваемые компилятором файлы, такие как *.obj, скомпилированные исполняемые файлы, ...)

  2. Упорядочить файлы в папки и подпапки. Хотя возможно переименовать/переместить файлы и позже, настоятельно рекомендуется, чтобы структура вашего проекта была сформирована перед импортом!

Теперь выберите самую верхнюю папку в структуре папок проекта в Проводнике Windows и сделайте правый щелчок для открытия контекстного меню. Выберите команду TortoiseSVNИмпорт..., которая откроет диалоговое окно:

Рисунок 4.6. Диалог импорта

Диалог импорта


В этом диалоге вы должны ввести URL места в хранилище, в которое вы желаете импортировать проект. Очень важно понять, что сама импортируемая локальная папка в хранилище не появится, только её содержимое. Например, если у вас имеется следующая структура:

C:\Проекты\Widget\source
C:\Проекты\Widget\doc
C:\Проекты\Widget\images
      

и вы импортируете C:\Проекты\Widget в http://mydomain.com/svn/trunk, то вы можете быть удивлены, что ваши подпапки попадут непосредственно в ствол, вместо того, чтобы остаться в подпапке Widget. Вам необходимо указать подпапку как часть URL,http://mydomain.com/svn/trunk/Widget-X. Обратите внимание: команда импорта автоматически создаёт подпапки в хранилище, если они не существуют.

Сообщение импорта используется как сообщение журнала.

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

Как только вы нажмёте ОК, TortoiseSVN импортирует в хранилище полностью всё дерево папок со всеми файлами. Сейчас проект помещён в хранилище под управление версиями. Пожалуйста помните, что та папка, которую вы импортировали, НЕ НАХОДИТСЯ под управлением версиями! Для получения рабочей копии, находящейся под управлением версиями, вы должны произвести извлечение только что импортированной версии. Или продолжайте чтение для того, чтобы узнать как импортировать папку на месте.

Импорт на месте

Предполагая, что хранилище уже у вас есть, и вы желаете добавить в него новую папку со всей её структурой, просто выполните следующие шаги:

  1. Чтобы создать папку нового проекта прямо в хранилище используйте обозреватель хранилища. Если вы используете одну из стандартных схем, то возможно вы захотите создать её как подпапку в trunk нежели в корне хранилища. Обозреватель хранилища показывает его структуру прямо как проводник Windows, так что вы можете видеть как там всё организовано.

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

  3. Воспользуйтесь командой TortoiseSVNДобавить... на новой версированной папке для добавления части или всего содержимого. Вы можете добавлять и убирать файлы, задавать свойства svn:ignore для папок и производить любые другие необходимые вам изменения.

  4. Зафиксируйте папку верхнего уровня, и у вас получится новое версированное дерево и локальная рабочая копия, созданная из вашей существующей папки.

Особые файлы

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

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

Например, вы можете посмотреть на скрипт сборки TortoiseSVN. Он вызывает файл с именем default.build.user, который не существует в хранилище - только default.build.user.tmpl. default.build.user.tmpl - это шаблон файла, который каждый разработчик получает из хранилища и переименовывает его в default.build.user. Внутри этого файла мы поместили комментарии, так что пользователи видят, какие строки они должны отредактировать и изменить в соответствии с их локальными настройками, чтобы это заработало.

И чтобы не сбивать с толку пользователей, мы также добавили файл default.build.user в список игнорирования для его родительской папки, т.е. мы устанавливаем свойство Subversion svn:ignore так, чтобы оно включало это имя файла. Таким образом, оно не показывается как неверсированное при каждой фиксации.

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

Для получения рабочей копии вам надо произвести извлечение из хранилища.

Выберите в Проводнике Windows папку, в которой хотите разместить вашу рабочую копию. Сделайте правый щелчок для вызова контекстного меню и выберите команду TortoiseSVNИзвлечь..., после чего появится следующий диалог:

Рисунок 4.7. Диалог извлечения

Диалог извлечения


Если ввести имя пока ещё несуществующей папки, то она будет создана.

Важно

При настройках по умолчанию пункт меню "Извлечь" размещён не в подменю TortoiseSVN, а показан на верхнем уровне меню проводника. Команды TortoiseSVN, которые находятся не в подменю начинаются с SVN: SVN Извлечь...

Глубина извлечения

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

Полностью рекурсивно

Извлекает всё дерево целиком, включая все дочерние папки и подпапки.

Непосредственные потомки, включая папки

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

Только потомки-файлы

Извлекает указанную папку, включая все файлы, но не включая дочерние папки.

Только этот элемент

Извлекает только указанную папку. Не извлекает в неё файлы и дочерние папки.

Рабочая копия

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

Исключить

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

Для легкого выбора элементов, которые вы хотите фиксировать, и заставить получаемую рабочую копию хранить только эти элементы, кликните кнопку Choose items.... Это действие откроет новый диалог, в котором вы можете отметить все элементы, которые вы хотите хранить в вашей рабочей копии и снять пометку для остальных. Получаемая рабочая копия будет неполным извлечением. Обновление такой рабочей копии не будет получать отсутствующие файлы и папки, а только обновлять существующие в рабочей копии.

Если вы извлекаете неполную рабочую копию (т.е. выбирая что-то кроме полностью рекурсивно для глубины извлечения), то вы можете легко добавить или удалить подпапки позже используя один из следующих методов.

Неполное извлечение используя Обновить до ревизии

Правый клик на извлеченной папке, затем используйте TortoiseSVNОбновить до ревизии и нажмите Выберите элементы.... При этом откроется такой же диалог, как и при начальном извлечении и позволит вам отобрать или отменить выбор элементов для включения в извлечение. Этот метод очень гибкий, но может оказать медленным, т.к. каждый элемент в папке обновляется по отдельности.

Неполное извлечение используя Обозреватель хранилища

Правый клик на извлеченной папке, затем используйте TortoiseSVNОбозреватель хранилища для вызова обозревателя хранилища. Найдите подпапку, которую вы хотите добавить в вашу рабочую копию, затем выберите Контекстное менюОбновить элемент до ревизии....

Неполное извлечение используя Проверить на наличие изменений

В диалоге проверки на наличие изменений сначала удерживая shift нажмите кнопку Проверить хранилище. Все существующие в хранилище файлы и папки, которые пока ещё не были вами извлечены, будут показаны в диалоге как добавлен отдалённо. Сделайте правый щелчок на папке (папках), которую вы желали бы добавить в вашу рабочую копию, и выполните Контекстное менюОбновить.

Эта возможность очень полезна, когда вы желаете извлечь только некоторые части из большого дерева, но при этом желаете сохранить удобство обновления одной рабочей копии. Предположим, у вас есть большое дерево, в котором есть подпапки от Проект01 до Проект99, и вы желаете извлечь только Проект03, Проект25 и Проект76/ПодПроект. Выполните следующие шаги:

  1. Извлеките родительскую папку с глубиной «Только этот элемент» Теперь у вас есть пустая папка верхнего уровня.

  2. Выберите новую папку и воспользуйтесь пунктом TortoiseSVNОбозреватель хранилища для отображения содержимого хранилища.

  3. Выполните правый щелчок на Проект03 и Контекстное менюОбновить элемент до ревизии.... Не изменяя настройки по умолчанию, нажмите на ОК. Теперь эта папка у вас полностью заполнена.

    Повторите ту же процедуру для Проект25.

  4. Перейдите к Проект76/ПодПроект и сделайте то же самое. На этот раз обратите внимание, что в папке Проект76 нет ничего, кроме ПодПроект, который полностью заполнен. Subversion создала для вас все промежуточные папки, не заполняя их.

Изменение глубины рабочей копии

Однажды вы извлекли рабочую копию на определенную глубину, позже чтобы получить больше или меньше содержания вы можете изменить эту глубину с помощью Context menuОбновить элемент до ревизии...

Использование старого сервера

Серверы версий до 1.5 не понимали запросов с глубиной рабочей копии, так что они не всегда могут эффективно обработать их. Команда будет по прежнему работать, но старые серверы могут посылать все данные оставляя клиенту фильтровать ненужное, что может означать большой сетевой трафик. Если это возможно, то вам следует обновить сервер до версии как минимум 1.5.

Если проект содержит ссылки на внешние проекты, которые вы не хотите извлекать в этот раз, используйте флажок Пропустить внешние

Важно

Если отмечен флажок Пропустить внешние, или если вы желаете изменить значение глубины, то вы должны будете выполнить обновление вашей рабочей копии с использованием команды TortoiseSVNОбновить до ревизии... вместо TortoiseSVNSVN Обновить.... Стандартное обновление включает все внешние ссылки и сохраняет существующее значение глубины.

Рекомендуется извлекать только ствол (trunk) из дерева папок, или его подветку. Если вы в URL укажете родительский путь для дерева папок, это может привести к полному заполнению вашего жёсткого диска, поскольку вы получите копию всего дерева хранилища, включая каждое ответвление и метку вашего проекта!

Экспорт

Иногда бывает необходимо создать локальную копию без всех этих папок .svn, например, для создания запакованного архиватором файла (zipped tarball) исходного кода. Прочтите «Экспорт рабочей копии Subversion», чтобы узнать, как это сделать.

Фиксация ваших изменений в хранилище

Отправка изменений, сделанных в вашей рабочей копии, называется фиксацией. Но перед фиксацией вы должны убедиться, что рабочая копия находится в актуальном состоянии. Можно либо сразу использовать TortoiseSVNSVN Обновить..., либо можно сначала вызвать TortoiseSVNПроверить на наличие изменений для просмотра файлов, которые были изменены локально или на сервере.

Диалог фиксации

Если ваша рабочая копия в актуальном состоянии, и конфликты отсутствуют, то вы готовы к фиксации ваших изменений. Выберите любой файл и/или папку, которые вы хотите зафиксировать, и вызовите TortoiseSVNSVN SVN Фиксировать....

Рисунок 4.8. Диалог фиксации

Диалог фиксации


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

Чтобы быстро отметить или снять пометку с типов файлов, таких как, все версированные файлы или все изменённые файлы, кликните на ссылки над списком отображаемых элементов.

Для информации о расцветке и оверлейных значках соответствующих статусу обратитесь к «Локальный и удалённый статус».

Элементы, переключенные на другие пути в хранилище, отмечаются маркером (s). Возможно, вы переключили что-то, пока работали в ответвлении, и забыли переключить обратно в основной ствол. Этот маркер - предупредительный сигнал!

Что фиксировать: файлы или папки?

Когда вы фиксируете файлы, диалог фиксации отображает только выбранные вами файлы. Когда вы фиксируете папки, диалог фиксации самостоятельно отберёт изменённые файлы. Если вы забудете о созданном вами новом файле, при фиксации папки он всё равно будет обнаружен. Фиксация папки не означает, что каждый файл будет помечен как изменённый, это просто способ облегчить вам жизнь путём выполнения в помощь вам большего объёма работы.

Большое количество неверсированных файлов в диалоге фиксации

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

  • добавить файл (или шаблон его имени) в список игнорируемых файлов на странице настроек. Это затронет все ваши рабочие копии.

  • добавить файл в список svn:ignore, используя TortoiseSVNДобавить в список игнорирования. Это затронет только папку, для которой вы устанавливаете свойство svn:ignore. Вы можете изменить свойство svn:ignore для папки при помощи диалога свойств Subversion.

  • добавить файл в список svn:global-ignores, используя TortoiseSVNДобавить в список игнорирования (рекурсивно). Это затронет папку, для которой вы устанавливаете свойство svn:global-ignores, и также все подпапки.

Для дополнительной информации прочтите «Игнорирование файлов и папок».

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

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

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

По умолчанию, при фиксации изменений все удерживаемые вами блокировки файлов снимаются после успешного завершения операции. Если вы желаете оставить эти блокировки, убедитесь, что флажок Сохранить блокировки отмечен. Значение, используемое по умолчанию для этого флажка, берётся из параметра no_unlock конфигурационного файла Subversion. Прочтите «Общие настройки», чтобы узнать, как редактировать конфигурационный файл Subversion.

Предупреждение при фиксации в ветку tags

Обычно фиксации делаются в ветки trunk или branch, но не в tags. Всё же, ветка tag считается неизменной и не должна изменяться.

При попытке фиксации в URL ветки tag TortoiseSVN показывает диалог с подтверждением, чтобы удостовериться действительно ли это то, что надо. Потому что в большинстве случаев такие фиксации делаются случайно.

Однако, эта проверка работает только если схема хранилища является одной из рекомендованных, т.е. использует названия trunk, branches и tags для обозначения трех главных областей. Если структура отличается, то определение того, что является tag/branch/trunk (известно также как шаблоны классификации) может быть настроено в диалоге настроек: «Настройки графа ревизий»

Перетаскивание мышью

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

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

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

Исправление внешних переименований

Иногда файлы переименовываются вне Subversion, и тогда в списке файлов каждый из них присутствует как два: один отсутствующий, другой - неверсированный. Чтобы избежать потери истории файла, необходимо известить Subversion о том, что они связаны. Просто выберите оба файла: и со старым именем (отсутствующий), и с новым именем (неверсированный) и выполните Контекстное менюПоправить переименование, чтобы обозначить эту пару файлов как переименование.

Исправление внешних копирований

Если вы скопировали файл, но забыли, что это надо было сделать при помощи команды Subversion, вы можете исправить такое копирование, чтобы новый файл не потерял свою историю. Просто выберите оба файла: и со старым именем (нормальный или изменённый), и с новым именем (неверсированный) и используйте Контекстное менюПоправить копирование, чтобы обозначить эту пару файлов как копирование.

Группы изменений

Диалог фиксации поддерживает группы изменений Subversion, предназначенных для группировки связанных файлов. Об этой возможности рассказывает «Группы изменений».

Фиксировать только части файлов

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

Щёлкните правой кнопкой мыши на файле и используйте Context MenuВосстановить после фиксации. При этом будет создана копия файла. Затем вы можете редактировать файл, например, в текстовом редакторе и отменить все изменения, которые вы не хотите фиксировать. После сохранения всех таких изменений вы можете фиксировать файл.

Использование TortoiseMerge

Если вы используете TortoiseMerge для редактирования файла вы можете либо редактировать изменения как обычно, либо отметить все изменения, которые вы хотите добавить. Щёлкните правой кнопкой мыши на изменённом блоке и воспользуйтесь командой Контекстное менюПометить это изменение чтобы добавить это изменение. Наконец, щёлкните правой кнопкой мыши и воспользуйтесь командой Контекстное менюОставить только помеченные изменения, которая изменит правый вид, добавив только ранее помеченные изменения и убрав неотмеченные.

После того, как фиксация выполнена, копия файла восстанавливается автоматически и у вас есть файл со всеми вашими изменениями, которые не были зафиксированы.

Исключение элементов из списка для фиксации

Иногда у вас есть версированные файлы, которые часто изменяются, но которые вы не хотели бы фиксировать на самом деле. Иногда это говорит о дефекте в вашем процессе сборки - почему эти файлы версированы? А не лучше использовать файлы шаблонов? Но иногда это неизбежно. Классическая причина - среда разработки изменяет пометку даты-времени файла проекта при каждой сборке. Файл проекта должен быть версированным, поскольку включает настройки для сборки, но его не нужно фиксировать только из-за того, что пометка даты-времени изменилась.

Чтобы помочь в затруднительных случаях вроде этого, была зарезервирована специальная группа изменений, называемая ignore-on-commit. Любой файл, добавленный в эту группу, не будет автоматически отмечаться в диалоге фиксации. Вы по-прежнему можете зафиксировать изменения в этом файле, но вы должны выбрать его в диалоге фиксации вручную.

Сообщения журнала при фиксации

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

Вы можете применять простое форматирование в сообщениях журнала, используя соглашения, похожие на употребляемые в электропочте. Чтобы текст выглядел по-другому, можно использовать *текст* для жирного начертания, _текст_ для подчёркивания и ^текст^ для курсива.

Рисунок 4.9. Проверка правописания в диалоге фиксации

Проверка правописания в диалоге фиксации


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

The log message window also includes a filename and function auto-completion facility. This uses regular expressions to extract class and function names from the (text) files you are committing, as well as the filenames themselves. If a word you are typing matches anything in the list (after you have typed at least 3 characters, or pressed Ctrl+Space), a drop-down appears allowing you to select the full name. The regular expressions supplied with TortoiseSVN are held in the TortoiseSVN installation bin folder. You can also define your own regexes and store them in %APPDATA%\TortoiseSVN\autolist.txt. Of course your private autolist will not be overwritten when you update your installation of TortoiseSVN. If you are unfamiliar with regular expressions, take a look at the introduction at https://en.wikipedia.org/wiki/Regular_expression, and the online documentation and tutorial at http://www.regular-expressions.info/.

Получить правильное регулярное выражение бывает сложно. Поэтому для поиска подходящего выражения есть тестовый диалог, в котором вы вводите выражение и набираете имена файлов для проверки. Запускайте его из командной строки с помощью команды TortoiseProc.exe /command:autotexttest.

Окно сообщения журнала также поддерживает фрагменты для сообщения фиксации. Эти фрагменты показываются в выпадающем списке автоподстановки когда вы нажмете горячую клавишу, и после выбора фрагмента в выпадающем списке вставляется полный текст фрагмента. Фрагменты поддерживаемые TortoiseSVN сохраняются в папке bin установки TortoiseSVN. Вы также можете определить собственные фрагменты и хранить их в файле %APPDATA%\TortoiseSVN\snippet.txt. Символ # – это комментарий. Разделители строк вставляются следующим образом: \n и \r. Чтобы вставить обратный слэш: \\.

Вы можете повторно использовать введённые ранее сообщения журнала: достаточно щёлкнуть на кнопку Недавние сообщения и появится список из нескольких последних введённых вами для этой рабочей копии сообщений. Количество сохраняемых сообщений может быть указано в диалоге настроек TortoiseSVN.

Вы можете очистить все сохранённые сообщения фиксации со страницы Сохранённые данные настроек TortoiseSVN, или же вы можете убирать отдельные сообщения непосредственно в диалоге Предыдущие сообщения журнала при помощи клавиши Delete.

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

Другой способ вставить имена в сообщение журнала - просто перетащить файлы из списка файлов в область редактирования.

Специальные свойства папок

Есть несколько специальных свойств для папок, которые предоставляют возможность более тонко настроить формат сообщений журнала и задать язык, используемый модулем проверки правописания. Прочтите раздел «Установки проекта» для дополнительной информации.

Интеграция с инструментами отслеживания ошибок

Если у вас подключена и действует система отслеживания ошибок, вы можете указать одну или несколько проблем в поле ввода ID ошибки / N проблемы. Если вводится сразу несколько проблем, то они должны быть разделены запятыми. Или, если вы используете основанную на регулярных выражениях поддержку системы отслеживания ошибок, просто добавьте упоминания проблем как часть сообщения журнала. Больше узнать об этом можно, прочитав «Интеграция с системами отслеживания ошибок/проблем».

Ход выполнения фиксации

После нажатия на ОК появится диалог, отображающий ход выполнения фиксации.

Рисунок 4.10. Диалог выполнения, отображающий ход выполнения фиксации

Диалог выполнения, отображающий ход выполнения фиксации


Различные действия, производимые при фиксации, в окне выполнения обозначаются разным цветом:

Голубой

Фиксация изменений.

Пурпурный

Фиксация новых добавлений.

Темно-красный

Фиксация удалений или перемещений.

Чёрный

Все другие элементы.

Это используемая по умолчанию цветовая схема, но вы можете настроить эти цвета в диалоге настроек. Для дополнительной информации смотрите «Настройки цветов в TortoiseSVN».

Обновление вашей рабочей копии путём внесения изменений, которые сделаны другими

Рисунок 4.11. Окно выполнения, отображающее законченное обновление

Окно выполнения, отображающее законченное обновление


Время от времени вы должны обеспечивать внесение изменений, сделанных другими, в вашу рабочую копию. Процесс внесения изменений с сервера в вашу локальную копию называется обновлением. Обновляться может одиночный файл, набор выбранных файлов или рекурсивно целые иерархии папок. Для обновления выберите файлы и/или папки, которые вы желаете обновить, щёлкните правой клавишей мыши и выберите из контекстного меню Проводника TortoiseSVNОбновить.... Появится окно, отображающее ход выполнения обновления. Изменения, сделанные другими, будут слиты с вашими локальными файлами с сохранением любых изменений, которые вы произвели в этих же файлах. Обновление не оказывает влияния на хранилище.

Различные действия, производимые при обновлении, в окне выполнения обозначаются разным цветом:

Пурпурный

Новый элемент, добавленный к вашей рабочей копии.

Темно-красный

Избыточный элемент, удалённый из вашей рабочей копии, или отсутствующий элемент, заменённый в вашей рабочей копии.

Зеленый

Изменения из хранилища, успешно слитые с вашими локальными изменениями.

Ярко-красный

Изменения из хранилища, вызвавшие при слиянии с локальными изменениями конфликт, который вы должны уладить.

Чёрный

Неизменённый элемент в вашей рабочей копии, обновлённый новой версией из хранилища.

Это используемая по умолчанию цветовая схема, но вы можете настроить эти цвета в диалоге настроек. Для дополнительной информации смотрите «Настройки цветов в TortoiseSVN».

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

После завершения обновления, в диалоге выполнения под списком файлов показывается сводка о количестве обновлённых, добавленных, удалённых, конфликтующих и т.д. элементов. Эту информацию можно скопировать в буфер обмена при помощи Ctrl+C.

Стандартная команда Обновить не имеет параметров и просто обновляет вашу рабочую копию до ревизии HEAD хранилища, что является наиболее часто используемым вариантом. Если вы хотите больше управлять процессом обновления, то должны использовать вместо этого TortoiseSVNОбновить до ревизии.... Это позволит вам обновить вашу рабочую копию до определённой ревизии, а не только до последней. Представим, что ваша рабочая копия имеет ревизию 100, но вы хотите воспроизвести состояние, которое она имела в ревизии 50. Тогда просто обновите до ревизии 50.

В том же диалоге вы можете выбрать глубину, до которой обновить текущую папку. Используемые термины описаны в xref linkend="tsvn-dug-checkout-depth"/>. Глубина по умолчанию — это Рабочая копия, которая хранит настройки существующей глубины. Вы также можете установить глубину постоянной, это означает что последующие обновления будут использовать эту новую глубину, т. е. эта глубина используется по умолчанию.

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

Вы также можете выбрать игнорировать ли любые внешние проекты при обновлении (т. е. проекты использованные с помощью svn:externals).

Внимание

После того, как вы обновили файл или папку до нужной ревизии, вы не должны делать изменения в этих файлах. Вы получите ошибку «устарел» при попытке их зафиксировать! Если вы хотите отменить изменения в файле и начать заново с ранней ревизии, вы можете откатиться к предыдущей ревизии в диалоге журнала ревизий. Для дополнительных инструкций и других возможных методов, ознакомьтесь с «Возвратиться к старым ревизиям в хранилище (откат)».

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

Если вам нужна просто локальная копия старой ревизии файла, лучше использовать команду Контекстное менюСохранить ревизию в... из диалога журнала для этого файла.

Несколько файлов/папок

Если выбрать несколько файлов и папок в Проводнике, и затем выполнить команду Обновить, все эти файлы/папки будут обновляться по очереди. TortoiseSVN обеспечивает, чтобы все файлы/папки из одного хранилища обновлялись точно до одной ревизии!, - даже если между этими обновлениями была выполнена другая фиксация.

Улаживание конфликтов

Когда-нибудь у вас возникнет конфликт при обновлении/слиянии ваших файлов из хранилища или при переключении рабочей копии на другой URL. Существует два типа конфликтов:

конфликты файлов

Конфликт файлов возникает, когда двое (или более) разработчиков изменили одни и те же строки файла.

конфликты деревьев

Конфликт деревьев возникает, когда разработчик переместил/переименовал/удалил файл или папку, которые другой разработчик также переместил/переименовал/удалил или же только изменил.

Конфликты файлов

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

<<<<<<< имя файла

ваши изменения

=======

результат автоматического мержа с репозиторием

>>>>>>> ревизия

Также, для каждого файла, имеющего конфликты, Subversion создает в том же каталоге три дополнительных файла:

filename.ext.mine

Это ваш файл, каким он был в рабочей копии перед выполнением обновления, т.е. без конфликтных отметок. В этом файле содержатся ваши последние в нём изменения, и ничего другого.

filename.ext.rСТАРАЯ_РЕВИЗИЯ

Это файл, который был базовой ревизией перед обновлением вашей рабочей копии, т.е. это тот файл, который был извлечён до того, как вы начали вносить ваши последние изменения.

filename.ext.rНОВАЯ_РЕВИЗИЯ

Это файл, который был получен с сервера клиентом Subversion при обновлении вашей рабочей копии. Этот файл соответствует ведущей (HEAD) ревизии хранилища.

Вы можете либо запустить внешнюю утилиту слияния / редактор конфликтов с помощью TortoiseSVNРедактировать конфликты, либо использовать любой текстовый редактор для ручного улаживания конфликта. Вы должны решить, как должен выглядеть код, сделать необходимые изменения и сохранить файл. Использование инструмента слияния, например, TortoiseMerge или другого популярного инструмента, обычно является более простым вариантом, т.к. в большинстве случаев они отображают файлы в 3-х панелях и вам не нужно беспокоиться о маркерах конфликта. Если же вы используете текстовый редактор, то вы должны найти строки начинающиеся с символов <<<<<<<.

После этого выполните команду TortoiseSVNУлажено и зафиксируйте ваши изменения в хранилище. Пожалуйста, помните, что команда 'Улажено' на самом деле конфликты не улаживает. Она только удаляет файлы filename.ext.mine и filename.ext.r* для того, чтобы вы могли зафиксировать ваши изменения.

Если конфликты возникли в двоичных файлах, Subversion не пытается самостоятельно слить эти файлы. Локальный файл остаётся неизменённым (точно таким, как при последнем вашем изменении) и у вас есть файлы filename.ext.r*. Если вы хотите отменить ваши изменения, и сохранить версию из хранилища, используйте команду 'Убрать изменения'. Если вы хотите сохранить вашу версию и переписать версию в хранилище, используйте команду 'Улажено', после чего зафиксируйте вашу версию.

Вы можете использовать команду 'Улажено' для нескольких файлов, если, после щелчка правой клавишей на родительской папке, выбрать TortoiseSVNУладить... Появится диалог со списком всех конфликтующих файлов в этой папке, и вы сможете выбрать, какие из них пометить как улаженные.

Конфликт свойств

Конфликт свойств возникает когда два или более разработчиков изменили одно и то же свойство. Как и содержимое файла, разрешение конфликта может быть выполнено только разработчиками.

Если одно из изменений должно перекрыть другое, то выберите вариант Уладить, применив локальное свойство или Resolve using remote property. Если изменения должны быть слиты, выберите Редактировать свойство вручную, решите каким должно быть значение свойства и отметьте как разрешенный.

Конфликты деревьев

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

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

TortoiseSVN может помочь обнаружить подходящее место для слияния изменений, но, возможно, потребуются дополнительные усилия по улаживанию конфликтов. Помните, после обновления рабочая БАЗА всегда содержит ту ревизию каждого элемента, которая была у него в хранилище во время обновления. И когда вы убираете изменение после обновления, оно вернётся к состоянию, каким оно было в хранилище, а не к тому, каким оно было, когда вы начали делать свои локальные изменения.

Локальное удаление, поступающее при обновлении редактирование

  1. Разработчик А изменяет Foo.c и фиксирует это в хранилище.

  2. Одновременно разработчик Б переименовывает Foo.c в Bar.c в своей рабочей копии, или просто удаляет Foo.c или его родительскую папку.

Обновление рабочей копии разработчика Б приводит к конфликту деревьев:

  • Foo.c удалён из рабочей копии, но помечен как участвующий в конфликте деревьев.

  • Если конфликт произошёл из-за переименования, а не из-за удаления, то Bar.c помечен как добавленный, но он не содержит изменений, выполненных разработчиком А.

Разработчик Б теперь должен решить, оставлять ли изменения разработчика А. В случае переименования файла, он может перенести изменения из Foo.c в переименованный файл Bar.c путём слияния. Для простых удалений файлов или папок он может оставить элементы с изменениями разработчика А и отказаться от удаления. Или, пометив конфликт как улаженный и ничего больше не делая, отказаться в итоге от изменений разработчика А.

The conflict edit dialog offers to merge changes if it can find the original file of the renamed Bar.c. If there are multiple files that are possible move sources, then a button for each of these files is shown which allow you to chose the correct file.

Локальное редактирование, поступающее при обновлении удаление

  1. Разработчик А переименовывает Foo.c в Bar.c и фиксирует это в хранилище.

  2. Разработчик Б изменяет Foo.c в своей рабочей копии.

Или в случае переименования папки...

  1. Разработчик А переименовывает родительскую папку FooFolder в BarFolder и фиксирует это в хранилище.

  2. Разработчик Б изменяет Foo.c в своей рабочей копии.

Обновление рабочей копии разработчика Б приводит к конфликту деревьев. Для простого конфликта файлов:

  • Bar.c добавлен в рабочую копию как обычный файл.

  • Foo.c помечен как добавленный (с историей) и как участвующий в конфликте деревьев.

Для конфликта папок:

  • BarFolder добавлена в рабочую копию как обычная папка.

  • FooFolder помечена как добавленная (с историей) и как участвующая в конфликте деревьев.

    Foo.c помечен как добавленный.

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

To merge her local changes with the reshuffle, Developer B must first find out to what filename the conflicted file Foo.c was renamed/moved in the repository. This can be done by using the log dialog. Then use the button which shows the correct source file to resolve the conflict.

If Developer B decides that A's changes were wrong then she must choose the Mark as resolved button in the conflict editor dialog. This marks the conflicted file/folder as resolved, but Developer A's changes need to be removed by hand. Again the log dialog helps to track down what was moved.

Локальное удаление, поступающее при обновлении удаление

  1. Разработчик А переименовывает Foo.c в Bar.c и фиксирует это в хранилище.

  2. Разработчик Б переименовывает Foo.c в Bix.c.

Обновление рабочей копии разработчика Б приводит к конфликту деревьев:

  • Bar.c помечен как добавленный с историей.

  • Bar.c добавлен в рабочую копию со статусом 'нормальный'.

  • Foo.c помечен как изменённый и участвующий в конфликте деревьев.

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

Затем разработчик Б должен решить, какое из новых имён файла Foo.cоставить - то, которое дал разработчик А или то, в которое он переименовал его сам.

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

Локально отсутствующее, поступающее при обновлении редактирование

  1. Разработчик А, работая в стволе, изменяет Foo.c и фиксирует это в хранилище.

  2. Разработчик Б, работая в ответвлении, переименовывает Foo.c в Bar.c и фиксирует это в хранилище.

Слияние изменений разработчика А в стволе с ответвлением в рабочей копии разработчика Б приводит к конфликту деревьев:

  • Bar.c уже в рабочей копии со статусом 'нормальный'.

  • Foo.c помечен как отсутствующий и участвующий в конфликте деревьев.

Для улаживания этого конфликта разработчик Б должен пометить файл как улаженный в диалоге редактирования конфликтов, который уберёт его из списка конфликтов. После этого он должен решить, скопировать отсутствующий файл Foo.c из хранилища в рабочую копию, или слить изменения разработчика А в файле Foo.c в переименованный Bar.c, или же проигнорировать изменения, пометив конфликт как улаженный и больше ничего не делая.

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

Локальное редактирование, поступающее при слиянии удаление

  1. Разработчик A работающий в trunk перемещает Foo.c в Bar.c и фиксирует это в хранилище.

  2. Разработчик Б, работая в ответвлении, изменяет Foo.c и фиксирует это в хранилище.

  1. Разработчик А, работая в стволе, переименовывает родительскую папку FooFolder в BarFolder и фиксирует это в хранилище.

  2. Разработчик Б, работая в ответвлении, изменяет Foo.c в своей рабочей копии.

Слияние изменений разработчика А в стволе с ответвлением в рабочей копии разработчика Б приводит к конфликту деревьев:

  • Bar.c помечен как добавленный.

  • Foo.c помечен как изменённый и участвующий в конфликте деревьев.

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

To merge her local changes with the reshuffle, Developer B must first find out to what filename the conflicted file Foo.c was renamed/moved in the repository. This can be done by using the log dialog for the merge source. The conflict editor only shows the log for the working copy as it does not know which path was used in the merge, so you will have to find that yourself. The changes must then be merged by hand as there is currently no way to automate or even simplify this process. Once the changes have been ported across, the conflicted path is redundant and can be deleted.

If Developer B decides that A's changes were wrong then she must choose the Mark as resolved button in the conflict editor dialog. This marks the conflicted file/folder as resolved, but Developer A's changes need to be removed by hand. Again the log dialog for the merge source helps to track down what was moved.

Локальное удаление, поступающее при слиянии удаление

  1. Разработчик A работающий в trunk перемещает Foo.c в Bar.c и фиксирует это в хранилище.

  2. Разработчик B работающий в ответвлении перемещает Foo.c в Bix.c и фиксирует это в хранилище.

Слияние изменений разработчика А в стволе с ответвлением в рабочей копии разработчика Б приводит к конфликту деревьев:

  • Bix.c помечен как имеющий нормальный (неизменённый) статус.

  • Bar.c помечен как добавленный с историей.

  • Foo.c помечен как отсутствующий и участвующий в конфликте деревьев.

To resolve this conflict, Developer B has to find out to what filename the conflicted file Foo.c was renamed/moved in the repository. This can be done by using the log dialog for the merge source.

Затем разработчик Б должен решить, какое из новых имён файла Foo.cоставить - то, которое дал разработчик А или то, в которое он переименовал его сам.

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

Другие конфликты деревьев

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

Получение информации о статусе

При работе с рабочей копией, вам часто надо понять, какие файлы вы изменили/добавили/удалили или переименовали, или же какие из файлов были изменены и зафиксированы другими.

Пометки на значках

Рисунок 4.12. Проводник с пометками на значках

Проводник с пометками на значках


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

В свежеизвлечённой рабочей копии все пометки выглядят как зеленая галочка. Это означает, что статус Subversion - нормальный.

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

Если в процессе обновления возник конфликт, тогда пометка меняется на желтый восклицательный знак.

Если вы установили для файла свойство svn:needs-lock, Subversion помечает этот файл как доступный только для чтения, пока вы не получите блокировку для этого файла. Эта пометка на файлах означает, что вы должны заблокировать файл перед тем, как начнёте его редактировать.

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

Эта пометка показывает, что некоторые файлы или папки внутри текущей папки запланированы для удаления из-под управления версиями, или же что файл, находящийся под управлением версиями, в папке отсутствует.

Символ плюс сообщает о том, что файл или папка запланированы для добавления под управление версиями.

Минус говорит о том, что файл или папка игнорируется системой управления версиями. Это необязательная пометка.

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

Фактически вы можете обнаружить, что не все из этих пометок используются в вашей системе. Это происходит из-за того, что число пометок, доступных в Windows, сильно ограничено, и если вы используете также и старую версию TortoiseCVS, тогда доступных позиций для размещения пометок будет недостаточно. TortoiseSVN попытается быть «Добропорядочным Гражданином (TM)» и ограничивает использование собственных пометок, оставляя эту возможность и другим программам.

Сейчас когда есть много Tortoise клиентов кругом (TortoiseCVS, TortoiseHg, ...) ограничение значков стало настоящей проблемой. Чтобы справиться с этим проект TortoiseSVN предоставил общеиспользуемый набор значков, загружаемый как DLL, который может быть использован всеми клиентами Tortoise. Проверьте поставщика вашего клиента, использует ли он это :-)

Для описания соответствия пометок на значках статусам Subversion и других технических подробностей, прочтите «Пометки на значках».

Подробный статус

Рисунок 4.13. Страница свойств Проводника, вкладка Subversion

Страница свойств Проводника, вкладка Subversion


Иногда вам необходима более детальная информация о файле/папке, нежели пометка на значке. Вы можете получить всю информацию, предоставляемую Subversion, в диалоге свойств Проводника. Просто выберите из контекстного меню для нужного файла или папки Меню WindowsСвойства (обратите внимание: это обычный пункт 'Свойства' в контекстном меню Проводника, а не тот, который в подменю TortoiseSVN!). В диалоге свойств TortoiseSVN добавляет новую вкладку свойств для файлов/папок, находящихся под управлением Subversion, где вы можете посмотреть всю существенную информацию о выбранном файле/папке.

Локальный и удалённый статус

Рисунок 4.14. Проверка на наличие изменений

Проверка на наличие изменений


Часто очень полезно знать, какие файлы вы изменили и какие файлы были изменены и зафиксированы другими. Для этого может пригодиться команда TortoiseSVNПроверить на наличие изменений.... Появившийся диалог покажет вам каждый файл, который вы каким-либо образом изменили в вашей рабочей копии, а также неверсированные файлы, которые у вас могут быть.

Если вы нажмёте на Проверить хранилище, тогда вы сможете также узнать про изменения в хранилище. Таким образом, перед обновлением вы можете проверить возможность возникновения конфликтов. Вы также можете обновить только выбранные файлы из хранилища без обновления всей папки. По умолчанию, кнопка Проверить хранилище получает удалённый статус только с глубиной извлечения рабочей копии. Если вы желаете увидеть все файлы в хранилище, даже те, которые вы не извлекали, то вам надо удерживать клавишу Shift при щелчке на кнопке Проверить хранилище.

Диалог использует различные цвета для обозначения статуса.

Голубой

Локально изменённые элементы.

Пурпурный

Добавленные элементы. Элементы, которые были добавлены с историей, имеют знак + в столбце Статус текста, и подсказка показывает, откуда был скопирован элемент.

Темно-красный

Удалённые или отсутствующие элементы.

Зеленый

Элементы, изменённые локально и в хранилище. Изменения будут объединены при обновлении. Это может привести к конфликту при обновлении.

Ярко-красный

Элементы, изменённые локально и удалённые в хранилище, или измененные в хранилище и удалённые локально. Эта ситуация вызовет конфликт при обновлении.

Чёрный

Неизменённые и неверсированные элементы.

Это используемая по умолчанию цветовая схема, но вы можете настроить эти цвета в диалоге настроек. Для дополнительной информации смотрите «Настройки цветов в TortoiseSVN».

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

Оверелеи показаны для следующих состояний:

  • Глубина извлечения empty обозначает только сам элемент.

  • Глубина извлечения files обозначает только сам элемент и все дочерние файлы без дочерних папок.

  • Глубина извлечения immediates обозначает только сам элемент и все дочерние файлы и папки, но без элементов дочерних папок.

  • Вложенные элементы, т.е. рабочие копии внутри рабочей копии.

  • Внешние элементы, т.е. все элементы добавленные с использованием свойства svn:externals.

  • Элементы, которые были восстановлены после фиксации. Более подробно см. «Фиксировать только части файлов».

  • Элементы, у которых изменены свойства, но только свойство svn:mergeinfo. Если изменено любое другое свойство, то оверлей не используется.

Элементы, которые были переключены на другой путь хранилища, отмечены маркером (s). Может быть вы переключили что-то пока работали в ответвлении и забыли переключить обрано на trunk. Это предупреждающий знак для вас! Контекстное меню позволяется вам переключить это обратно на нормальной путь.

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

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

Неверсированные и игнорируемые файлы могут быть отправлены отсюда в корзину при помощи команды Контекстное менюУдалить. Если вы желаете удалить файлы навсегда (минуя корзину) держите нажатой клавишу Shift при щелчке на Удалить.

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

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

Если вы работаете над несколькими несвязанными задачами одновременно, вы можете сгруппировать файлы в группы изменений. Прочтите «Группы изменений» для более подробной информации.

В нижней части окна показывается сводка о диапазоне ревизий хранилища, встречающихся в вашей рабочей копии. Это ревизии фиксаций , а не ревизии обновлений; они отображают диапазон ревизий, в которых эти файлы были последний раз зафиксированы, а не ревизий, до которых они были обновлены. Обратите внимание: показанный диапазон относится только к показанным элементам, а не ко всей рабочей копии. Если вам нужны эти же данные для всей рабочей копии, необходимо отметить флажок Показать файлы без изменений.

Подсказка

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

Исправление внешних переименований

Иногда файлы переименовываются вне Subversion, и тогда в списке файлов каждый из них присутствует как два: один отсутствующий, другой - неверсированный. Чтобы избежать потери истории файла, необходимо известить Subversion о том, что они связаны. Просто выберите оба файла: и со старым именем (отсутствующий), и с новым именем (неверсированный) и выполните Контекстное менюПоправить переименование, чтобы обозначить эту пару файлов как переименование.

Исправление внешних копирований

Если вы скопировали файл, но забыли, что это надо было сделать при помощи команды Subversion, вы можете исправить такое копирование, чтобы новый файл не потерял свою историю. Просто выберите оба файла: и со старым именем (нормальный или изменённый), и с новым именем (неверсированный) и используйте Контекстное менюПоправить копирование, чтобы обозначить эту пару файлов как копирование.

Просмотр различий

Часто возникает необходимость просмотреть содержимое ваших файлов, чтобы понять, что же было изменено. Вы можете достичь этого путём выбора пункта Различия в контекстном меню TortoiseSVN для нужного файла с изменениями. Это запустит внешнюю программу просмотра различий, которая сравнит текущий файл с нетронутой копией (BASE, Базовой ревизией), которая была сохранена после последнего извлечения или обновления.

Подсказка

Даже для файлов не из рабочей копии, или когда у вас файл представлен в нескольких версиях, вы всё равно можете посмотреть различия:

Отметьте два файла, которые вы хотите сравнить, в Проводнике (например, используя Ctrl и мышку) и выберите из контекстного меню TortoiseSVN команду Различия. Файл, отмеченный последним (тот, который в фокусе, т.е. в прямоугольнике из точек), будет считаться более поздним.

Группы изменений

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

Вы можете встретить группы изменений в нескольких местах, но наиболее важные из них - это диалог фиксации и диалог проверки наличия изменений. Давайте начнём в диалоге проверки на наличие изменений, после того, как вы поработали над несколькими возможностями и над многими файлами. Когда вы впервые открываете диалог, все изменённые файлы выводятся одним списком. Предположим, теперь вы желаете навести порядок и сгруппировать эти файлы в соответствии с реализуемыми ими возможностями.

Выберите один или более файлов и воспользуйтесь Контекстное менюПереместить в группу изменений для помещения выделенного в группу изменений. Изначально ни одной группы изменений не существует, поэтому, когда вы делаете это в первый раз, создаётся новая группа. Назовите её так, чтобы было понятно, для чего она будет использоваться, и нажмите ОК. Теперь диалог изменится, чтобы показать группы элементов.

После того, как вы создали группу изменений, вы можете перетаскивать в неё элементы, как из других групп, так и из Проводника Windows. Перетаскивание из Проводника может пригодиться, поскольку позволяет добавлять элементы в группу до того, как файл будет изменён. Это можно сделать и из диалога проверки наличия изменений, но для этого придётся включить отображение всех неизменённых файлов.

Рисунок 4.15. Диалог фиксации с группами изменений.

Диалог фиксации с группами изменений.


В диалоге фиксации вы можете видеть те же файлы, сгруппированные по группам изменений. Заголовки групп, помимо наглядного отображения разбиения на группы, можно также использовать для выбора файлов для фиксации.

Одно из имён группы изменений TortoiseSVN резервирует для собственного использования, а именно ignore-on-commit. Оно используется для пометки версированных файлов, которые почти никогда не должны фиксироваться, даже если в них есть локальные изменения. Эту возможность описывает «Исключение элементов из списка для фиксации».

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

Подсказка

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

Предупреждение

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

Shelving

More often than wanted, it's necessary to stop what you were working on and work on something else. For example a serious problem needs immediate dealing with and you have to stop working on the new feature. If possible, you should commit the changes you have done so far and then start working on the urgent issue, but often those changes would break the build or are just not ready for committing yet.

So if you can't commit your local changes yet, you have to put them aside while you're working on the urgent issue. The shelving feature helps you do exactly that: you can store your local changes on a shelve, get your working copy in a clean state again and work on the issue. After you're finished with the urgent issue and you've committed those changes, you can unshelve your shelved work and continue working on your previous task again.

Two new commands are implemented for this. One for shelving and one for unshelving.

To shelve your local changes, select your working copy and use Context MenuShelve The following dialog allows you to select the files you want to shelve and give a name under which you want to store them.

Рисунок 4.16. Shelve dialog

Shelve dialog


If you select an existing shelf, then a new version is created for that shelf. If you provide a new name, a new shelf is created for the selected files.

If you click the Shelve button, the shelf is created and your working copy files are reset to a clean state. If you click the Checkpoint button, the shelf is created but your local modifications are kept.

To unshelve your changes, use Context MenuUnshelve to get the unshelve dialog. This dialog shows you a list of all shelved items. Select the shelved item you want and the version to apply back to your working copy and click Apply.

Рисунок 4.17. Unshelve dialog

Unshelve dialog


Подсказка

Shelves are purely a local client feature. Creating and removing Shelves will not affect the repository, nor anyone else's working copy.

Experimental

The shelving feature is still marked as experimental.

That means that while shelving works as advertised, it is still in a stage where it's heavily improved and worked on. That also means that there's no guarantee that the shelves you create are upwards compatible and future versions might not be able to use them. And of course the UI might change as well in future versions to accommodate new features and behaviors.

Диалоговое окно журнала ревизий

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

Диалог журнала ревизий извлекает и отображает все эти сообщения журнала. Окно разделено на три части:

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

    Отображаемые голубым строки означают, что что-то было скопировано в эту линию разработки (возможно, из ответвления).

  • Средняя панель отображает полное сообщение журнала для выбранной ревизии.

  • Нижняя панель отображает список всех файлов и папок, которые были изменены в этой же ревизии.

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

Вызов диалога журнала ревизий

Рисунок 4.18. Диалоговое окно журнала ревизий

Диалоговое окно журнала ревизий


Есть несколько мест, из которых можно вызвать диалоговое окно журнала:

  • Из контекстного меню TortoiseSVN

  • Со страницы свойств

  • Из окна выполнения после окончания обновления. В этом случае диалог журнала отображает только те ревизии, которые были изменены с момента последнего обновления

  • Из обозревателя хранилища

Если хранилище недоступно, вы увидите диалог Перейти в автономный режим?, который описывает «Автономный режим».

Действия в журнале ревизий

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

Если в ревизии были изменены файл или папка, в первой колонке отображается значок изменён.

Если в ревизии были добавлены файлы или папки, то во второй колонке отображается значок добавлен.

Если в ревизии были удалены файлы или папки, то в третьей колонке отображается значок удалён.

Если в ревизии файлы или папки были перемещены, то в четвёртой колонке отображается значок перемещён.

Если ревизия переместила или переименовала файл или директорию, то в четвертой колонке отображается значок перемещен.

Если ревизия заменила файл или директорию при перемещении/переименовании, то в четвертой колонке отображается значок перемещено с заменой.

Если ревизия объединила файл или директорию, то в четвертой колонке отображается иконка слито.

Если в ревизии есть обратное слияние файла или директории, то в четвертой колонке отображается значок обратное слияние.

Получение дополнительной информации

Рисунок 4.19. Контекстное меню верхней панели диалогового окна журнала ревизий

Контекстное меню верхней панели диалогового окна журнала ревизий


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

Сравнить с рабочей копией

Сравнивает выбранную ревизию с вашей рабочей копией. По умолчанию в качестве программы сравнения используется TortoiseMerge, поставляемая с TortoiseSVN. Если диалог журнала вызван для папки, он отобразит список изменённых файлов, и позволит просмотреть изменения, сделанные в каждом отдельном файле.

Сравнить с рабочей базой с просмотром авторства

Получает авторство для выбранной ревизии и файла рабочей ревизии BASE, и и сравнивает полученные результаты с применением визуального средства просмотра различий. Прочтите «Авторство различий» для дополнительной информации. (только файлы)

Показать изменения как объединённые различия

Позволяет просмотреть сделанные в выбранной ревизии изменения в виде объединённого файла различий (Unified-Diff) (формат заплаток GNU). Отображаются только различия (с несколькими строками контекста). Этот вид сложнее для изучения, чем визуальное сравнение файлов, но позволяет показать все изменения в файле в компактном формате.

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

Сравнить с предыдущей ревизией

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

Сравнить с предыдущей ревизией с просмотром авторства

Показывает диалог измененных файлов позволяющий вам выбрать файлы. Получает авторство для выбранной и предыдущей ревизий и сравнивает полученные результаты с применением визуального средства просмотра различий. (только папки)

Сохранить ревизию в...

Сохраняет выбранную ревизию в файл и у вас есть старая ревизия этого файла. (только файлы)

Открыть / Открыть с помощью...

Открывает выбранный файл либо с помощью приложения по умолчанию для этого типа файла, либо с помощью выбранного вами приложения. (только файлы)

Авторство...

Получает авторство файла для выбранной ревизии. (только файлы)

Обзор хранилища

Открывает обозреватель хранилища для исследования выделенных файлов или папок в хранилище, какими они были в выбранной ревизии.

Создать ответвление/метку из ревизии

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

Обновить элемент до ревизии

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

Если вы желаете навсегда убрать более раннее изменение, используйте вместо этого Вернуть к этой ревизии.

Вернуть к этой ревизии

Возвращает к более ранней ревизии. Если вы уже выполнили несколько изменений, и затем решили, что вам действительно необходимо вернуться назад, к состоянию как в ревизии N, то это та команда, которая вам нужна. Изменения отменяются в вашей рабочей копии, так что эта операция не влияет на хранилище, пока вы не зафиксировали эти изменения. Обратите внимание, что она отменяет все изменения, сделанные после выбранной ревизии, заменяя файл/папку более ранней версией.

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

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

Если после выполнения этого действия вы решите отменить отмену и вернуть вашу рабочую копию обратно, в прежнее неизменённое состояние, вы должны использовать TortoiseSVNУбрать изменения из Проводника Windows, которое отбросит локальные изменения, произведённые этим обратным слиянием.

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

Отменить изменения из этой ревизии

Отменяет изменения, которые были сделаны в выбранной ревизии. Изменения отменяются в вашей рабочей копии, так что эта операция не влияет на хранилище вообще! Обратите внимание: отменяются изменения, сделанные только в этой ревизии. Эта операция не заменяет целиком файл в вашей рабочей копии файлом более ранней ревизии. Это очень полезно для отмены более ранних изменений, после которых были произведены другие, не связанные с ними, изменения.

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

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

Вы можете отменить отмену как описано выше в Вернуть к этой ревизии.

Слить ревизию с...

Производит слияние выделенных ревизий с другой рабочей копией. При помощи диалога выбора папки можно выбрать рабочую копию для проведения слияния, но после этого не предоставляется ни запроса подтверждения, ни возможности выполнить пробное слияние. Хорошей практикой является производить слияние с неизменённой рабочей копией, чтобы вы смогли отменить изменения, если слияние не сработает! Это полезная возможность, если вы желаете слить выбранные ревизии из одного ответвления с другим.

Извлечь...

Выполняет свежее извлечение выбранной папки из заданной ревизии. При этом открывается окно, в котором необходимо подтвердить URL-адрес и ревизию, а также выбрать место для извлечения.

Экспорт...

Экспортирует выделенный файл/папку из выбранной ревизии. При этом открывается диалог для подтверждения URL-адреса и ревизии, а также выбора места для размещения экспорта.

Изменить автора / сообщение журнала

Отредактировать сообщение журнала или автора, относящихся к одной из предыдущих фиксаций. Прочтите «Изменение сообщения журнала и автора», чтобы узнать, как это работает.

Показать свойства ревизии

Позволяет просмотреть и отредактировать любое свойство ревизии, а не только сообщение журнала или автора. Подробнее - «Изменение сообщения журнала и автора».

Копировать в буфер обмена

Копирует в буфер обмена подробности записей журнала для выбранных ревизий. При этом будут скопированы номер ревизии, автор, дата, сообщение журнала и список изменённых объектов для каждой ревизии.

Найти в сообщениях журнала...

Выполняет поиск в сообщениях журнала указанного вами текста. Поиск будет производиться в введённых сообщениях, а также в сводке выполненных действий, создаваемой Subversion (отображаемой в нижней панели). Поиск не зависит от регистра.

Создать рецензию code collaborator

Это меню отображается, если установлен инструментарий SmartBear code collaborator. При первом запуске появляется диалог, в котором пользователю предлагается ввести свои учетные данные для code collaborator и SVN. Когда настройки сохранены, диалог больше не появляется при вызове меню, за исключением ситуации, когда пользователь удерживает клавишу Ctrl при выполнении пункта меню. Конфигурация и выбранные ревизии используются для запуска графического интерфейса пользователя клиента code collaborator, который создает новую рецензию для выбранных ревизий.

Рисунок 4.20. Диалог настроек Code Collaborator

Диалог настроек Code Collaborator


Рисунок 4.21. Контекстное меню верхней панели для двух выбранных ревизий

Контекстное меню верхней панели для двух выбранных ревизий


Если выделить сразу две ревизии (применяя для этого, как обычно, клавишу Ctrl), контекстное меню изменится и в нём будет меньше возможностей:

Сравнить ревизии

Сравнивает две выбранные ревизии с использованием визуального средства просмотра различий. По умолчанию, в качестве такого средства используется TortoiseMerge, поставляемая с TortoiseSVN.

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

Авторство ревизий

Получает авторство для двух ревизий и сравнивает полученные результаты с применением визуального средства просмотра различий. Для получения более подробной информации прочтите «Авторство различий».

Показать различия как объединённые различия

Просмотр различий между двумя выбранными ревизиями в виде объединённого файла различий. Это работает и для файлов, и для папок.

Копировать в буфер обмена

Копирует сообщения журнала в буфер обмена, как описано выше.

Найти в сообщениях журнала...

Искать в сообщениях журнала, как описано выше.

Если выбрать две или больше ревизий (используя, как обычно, Ctrl или Shift), контекстное меню будет включать пункт для отмены всех изменений, которые сделаны в выбранных ревизиях. Это простейший путь откатить изменения из группы ревизий за один подход.

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

Если у всех выбранных ревизий один автор, вы можете изменить автора всех этих ревизий сразу.

Рисунок 4.22. Контекстное меню нижней панели окна журнала

Контекстное меню нижней панели окна журнала


Нижняя панель окна журнала также имеет контекстное меню, которое предоставляет следующие возможности:

Показать изменения

Показать изменения в выбранной ревизии для выбранного файла.

Авторство изменений

Получает авторство для выбранной и предыдущей ревизий выделенного файла и сравнивает полученные результаты с применением визуального средства просмотра различий. Прочтите «Авторство различий» для дополнительной информации.

Показать как объединённые различия

Показывает изменения в формате объединённых различий. Это контекстное меню доступно только для файлов, отображаемых как изменённый.

Открыть / Открыть с помощью...

Открывает выбранный файл либо в программе просмотра по умолчанию для этого типа файлов, либо в другой выбранной вами программе.

Авторство...

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

Отменить изменения из этой ревизии

Отменяет изменения, сделанные в выделенном файле в этой ревизии.

Показать свойства

Позволяет посмотреть свойства Subversion для выбранных элементов.

Журнал

Показывает журнал ревизий для одного выбранного файла.

Получить информацию о слияниях

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

Сохранить ревизию в...

Сохраняет выбранную ревизию в файл, чтобы вы могли получить и более старую ревизию этого файла.

Экспорт...

Экспортирует выбранные элементы в этой ревизии в папку сохраняя иерархию файлов.

Когда выбрано несколько файлов в нижней панели окна журнала контекстное меню изменяется на следующее:

Рисунок 4.23. Нижняя панель диалога журнала с контекстным меню при нескольких выбранных файлах.

Нижняя панель диалога журнала с контекстным меню при нескольких выбранных файлах.


Сохранить ревизию в...

Сохраняет выбранную ревизию в файл, чтобы вы могли получить и более старую ревизию этого файла.

Показать множество изменений...

Показать изменения, сделанные в выбранных файлах выбранных ревизий. Обратите внимание, что функциональность показа изменений вызывается несколько раз, что может запустить несколько копий вашей утилиты показа различий, или только добавить новую вкладку сравнения в утилите. Если вы выбрали более 15 файлов, то вам будет предложено подтвердить действие.

Открыть множество локальных файлов...

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

Если вы удерживаете клавишу Ctrl при вызове команды, файлы рабочей копии всегда загружаются в Visual Studio. Это работает только при следующих условиях: Visual Studio должно быть запущено в том же контексте пользователя и иметь тот же уровень целостности процесса (process integrity level) [выполняемый как админ или нет] как и TortoiseProc.exe. Желательно иметь решение (solution) с загруженными изменёнными файлами, хотя это и не обязательно. Будут загружены только файлы существующие на диске с расширениями [.cpp, .h, .cs, .rc, .resx, .xaml, .js, .html, .htm, .asp, .aspx, .php, .css and .xml]. В Visual Studio может быть загружено максимум 100 файлов за раз, и файлы всегда загружаются в новые вкладки запущенного экземпляра Visual Studio. Преимущество просмотра изменений кода в Visual Studio заключается в том, что вы можете использовать встроенную навигацию по коду, поиск ссылок, статический анализ кода и другие инструменты встроенные в Visual Studio.

Экспорт...

Экспортировать выбранные файлы/папки выбранной ревизии. Вызывает диалог для подтверждения адреса URL и ревизии, и выбора местоположения для экспорта.

Подсказка

Вы можете заметить, что иногда мы упоминаем изменения, а иногда - различия. В чём разница?

Subversion использует номера ревизий подразумевая 2 разные вещи. Ревизия вообще представляет состояние хранилища в точке времени, но также она может использована для представления набора изменений, созданного этой ревизией. Например, «Done in r1234» означает, что изменения зафиксированные в ревизии r1234 реализуют функциональность X. Чтобы было понятно, какой смысл используется, мы используем два разных термина.

Если выбрать две ревизии, N и M, в контекстном меню будет предложено показать различия между двумя этими ревизиями. В терминах Subversion это diff -r M:N.

Если выбрать единственную ревизию N, в контекстном меню будет предложено показать изменения, сделанные в этой ревизии. В терминах Subversion это diff -r N-1:N или diff -c N.

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

Получение большего количества сообщений журнала

По нескольким причинам в окне журнала не всегда отображаются все когда-либо сделанные изменения:

  • В большом хранилище могут быть сотни или даже тысячи изменений, и получение их всех может занять много времени. Обычно вас интересуют самые недавние изменения. По умолчанию, число извлекаемых сообщений журнала ограничено 100, но вы можете изменить это значение во вкладке TortoiseSVNНастройки («Настройки диалогов TortoiseSVN - 1» ),

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

    Обычно пользователи оставляют этот флажок неотмеченным. TortoiseSVN запоминает состояние этого флажка, и в дальнейшем будет действовать в соответствии с вашим выбором.

    Когда окно журнала вызывается из диалога 'Слияние', по умолчанию флажок установлен всегда. Так сделано потому, что при слиянии наиболее часто интересуют изменения в ответвлениях, и в этом случае движение дальше корня ответвления не имеет смысла.

    Обратите внимание: сейчас Subversion реализует переименование как пару копирование/удаление, так что переименование файла или папки также останавливает отображение журнала в случае, если установлен этот флажок.

Если вы желаете просмотреть остальные сообщения журнала, нажмите на Следующие 100 для извлечения следующей сотни сообщений. Вы можете повторять это столько раз, сколько вам нужно.

Рядом с этой кнопкой расположена многофункциональная кнопка, которая запоминает последнюю функцию, для которой вы её использовали. Щёлкните на стрелке для просмотра доступных вариантов.

Если вы желаете просмотреть определённый диапазон ревизий, используйте Показать ряд.... Появится диалог, предлагающий ввести начальную и конечную ревизии.

Если вы желаете просмотреть все сообщения, начиная с ведущей (HEAD) ревизии и заканчивая ревизией 1, используйте Показать все.

Чтобы обновить последнюю ревизию в случае были другие фиксации пока диалог журнала был открыт нажмите клавишу F5.

Чтобы обновить кэш журнала, нажмите Ctrl-F5 ключи.

Текущая ревизия рабочей копии

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

Когда вы запускаете просмотр журнала для папки, происходит выделение наибольшей ревизии, обнаруженной где-либо в этой папке, и это требует обхода рабочей копии. Обход производится в отдельном потоке, чтобы не задерживать отображение журнала, но в результате выделение для папок может появляться не сразу.

Возможности по отслеживанию слияний

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

Рисунок 4.24. Диалог журнала, показывающий ревизии с отслеженными слияниями

Диалог журнала, показывающий ревизии с отслеженными слияниями

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

Конечно же, слияние никогда не бывает простым! Во время разработки возможности в ответвлении, вероятно, иногда производились слияния обратно из ствола для сохранения согласованности ответвления с основной линией разработки. Поэтому история слияний ответвления также включает ещё один слой истории слияний. Эти различные слои показываются в диалоге журнала при помощи уровня о&#