Притом, что эти команды используются не так часто как те которые рассматривались ранее в этой главе, иногда эти команды вам все-таки понадобятся.
svn cleanup
Когда Subversion изменяет рабочую копию (или любую информацию в области .svn) она пытается делать это как можно более безопасно. Перед изменением рабочей копии Subversion записывает свои намерения в лог файл. Затем для выполнения запрошенных изменений она выполняет команды из лог файла, устанавливая блокировку той части рабочей копии, с которой работает — делается это для невозможности работы других Subversion-клиентов с рабочей копией, которая находится в промежуточном состоянии. После выполнения запрошеных действий Subversion удаляет лог файл. Архитектурно, это напоминает журналируемую файловую систему. Если работа Subversion была прервана (в результате того, что процесс был убит или, например, из-за машинного сбоя) лог файлы остаются на диске. Перезапустив выполнение лог файлов, Subversion может завершить предварительно начатые операции и рабочая копия снова вернется в согласованное состояние.
Что собственно и делает svn cleanup: в рабочей копии выполняет поиск и выполнение незавершенных лог файлов, удаляя по ходу выполнения блокировки в рабочей копии. Если Subversion когда-нибудь говорила вам о том, что часть рабочей копии «заблокирована» тогда вам нужно запустить эту команду. Кроме того svn status покажет для заблокированных элементов букву L:
$ svn status
L somedir
M somedir/foo.c
$ svn cleanup
$ svn status
M somedir/foo.c
Не путайте эти блокировки рабочей копии с обычными блокировками, устанавливаемыми пользоватлями Subversion, использующими модель конкурентного управления версиями «lock-modify-unlock»; за более подробным определением обратитесь к Three meanings of «lock»
svn import
Команда svn import это быстрый способ скопировать не версионированное дерево файлов в хранилище, Создавая при необходимости промежуточные директории.
$ svnadmin create /usr/local/svn/newrepos
$ svn import mytree file:///usr/local/svn/newrepos/some/project \
-m "Initial import"
Adding mytree/foo.c
Adding mytree/bar.c
Adding mytree/subdir
Adding mytree/subdir/quux.h
Committed revision 1.
В предыдущем примере выполняется копирование содержимого директории mytree в директорию some/project хранилища:
$ svn list file:///usr/local/svn/newrepos/some/project
bar.c
foo.c
subdir/
Обратите внимание на то, что после завершения импорта, оригинальное дерево файлов не конвертируется в рабочую копию. Для того, чтобы начать работать вам необходимо создать новую рабочую копию (svn checkout) дерева файлов.
Подводя итоги
На настоящий момент мы рассмотрели большинство команд Subversion клиента. За исключением тех, которые предназначены для работы с ветвлениями и слияниями (см. Глава 4, Ветвление и слияние) и свойствами (см. «Свойства»). Кроме этого, найдите время просмотреть Глава 9, Полное справочное руководство по Subversion для того, что бы получить представление обо всем многообразии имеющихся у Subversion команд — и о том как с их помощью вы можете упростить свою работу.
[8] Конечно, ничего полностью из хранилища не удаляется — удаляется только из HEAD хранилища. Вы можете восстановить все, что вы удалили создав рабочую копию (или обновив существующую) на основе более ранней правки чем та в которой вы удалили элемент.
[9] Subversion использует свой внутренний механизм обнаружения различий, который по умолчанию использует для вывода единый формат представления различий. Если вы хотите получить различия в другом формате, укажите внешнюю программу поиска различий используя --diff-cmd и передав любые аргументы, которые вы хотите что бы она использовала в параметре --extensions. Например, для того что бы увидеть контекстные локальные изменения в файле foo.c игнорируя изменения пустых мест, запустите svn diff --diff-cmd /usr/bin/diff --extensions '-bc' foo.c.
[10] Вы можете удалить временные файлы самостоятельно, но нужно ли вам это делать, если это может сделать Subversion? Нам так не кажется.
[11] And if you ask them for it, they may very well ride you out of town on a rail.
[12] Видите? Мы же говорили вам, что Subversion это машина времени.
Глава 4. Ветвление и слияние
Содержание
Что такое ветка?
Использование веток
Создание ветки
Работа с веткой
Ключевые идеи, стоящие за ветками
Копирование изменений между ветками
Копирование отдельных изменений
Ключевые понятия, стоящие за слиянием
Как правильнее всего использовать слияние
Ручной контроль слияния
Предварительные просмотр при объединении
Конфликты при объединении
Учитывать или игнорировать происхождение
Типовые примеры использования
Полное объединение двух веток
Отмена изменений
Восстановление удаленных элементов
Типовые приемы при использовании веток
Ветки релизов
Функциональные ветки
Переключение рабочей копии
Метки
Создание простой метки
Создание комплексной метки
Поддержка веток
Структура хранилища
Продолжительность жизни информации
Подводя итоги
Ветвление, назначение меток и слияние понятия свойственные практически всем системам управления версиями. Если вы плохо знакомы с этими понятиями, то в этой главе мы предлагаем хорошее введение. Если эти понятия вам знакомы, тогда надеемся что вам будет интересно узнать как эти идеи реализует Subversion.
Ветвление это фундаментальное понятие управления версиями. Если вы доверии Subversion управлять своей информацией, то эта функция от которой со временем вы будете зависеть. Эта глава предполагает, что вы уже знакомы с основными понятиями Subversion (Глава 2, Основные понятия).
Достарыңызбен бөлісу: |