Если для файла применяется блокирование (как в в случае с SCCS и RCS в режиме по умолчанию), C-x C-q может либо блокировать файл, либо зафиксировать его:
• Если файл не заблокирован, C-x C-q блокирует его и делает доступным для записи,
чтобы вы могли его изменять.
• Если файл заблокирован вами и содержит изменения, C-x C-q фиксирует эти изменения. Для этого она сначала считывает журнальную запись новой версии. См. Раздел 14.7.3.3 [Буфер журнала], с. 119.
• Если файл заблокирован вами, но не содержит изменений с тех пор, как вы его блокировали, C-x C-q снимает блокировку и делает файл опять доступным только для чтения.
• Если файл заблокирован кем-то еще, C-x C-q спрашивает вас, хотите ли вы “украсть блокировку” у этого пользователя. Если вы ответите да, то файл становится блокированным вами, но человеку, который раньше заблокировал его, посылается сообщение, чтобы проинформировать о случившемся.
Эти правила применимы также, когда вы используете CVS в блокирующем режиме, за исключением того, что там нет такого понятия, как перехват блокировки.
14.7.3.2 Основы управления версиями без блокирования
Когда блокирования нет — по умолчанию в CVS — рабочие файлы всегда доступны для записи; вам не нужно ничего делать перед тем, как начать редактирование. Индикатором статуса в строке режима служит ‘-’, если файл не изменен; он заметяется на ‘:’, как только вы сохраняете любые изменения в рабочем файле.
Вот что делает C-x C-q при использовании CVS:
• Если какой-то другой пользователь зафиксировал свои изменения в мастер-файле, Emacs спрашивает вас, хотите ли вы влить эти изменения в ваш рабочий файл (см. Раздел 14.7.6.3 [Объединение], с. 124). Вы обязаны сделать это до того, как сможете зафиксировать свои собственные изменения.
• Если в мастер-файле нет изменений, но вы модификацировали ваш рабочий файл, C-x C-q фиксирует ваши изменения. Для этого она сначала считывает журнальную запись для новой версии. См. Раздел 14.7.3.3 [Буфер журнала], с. 119.
• Если файл не изменен, C-x C-q ничего не делает.
Эти правила применимы также и в том случае, если вы используете RCS в режиме, когда она не требует блокирования, за исключением того, что автоматическое объединение с мастер-файлом не реализовано. К сожалению, это означает, что вас не информируют, если еще один пользователь зафиксировал изменения в том же файле после того, как вы начали редактирование, и когда это происходит, его изменения в результате исчезнут в вашей зафиксированной версии (хотя они останутся в мастер-файле, так что не окажутся полностью потерянными). Поэтому вы должны убедиться, что текущая версия осталась неизмененной перед тем как фиксировать свои изменения. Мы надеемся устранить этот риск и предоставить автоматическое объединение для RCS в будущей версии Emacs.
Кроме того, даже в этом режиме RCS блокирование возможно, хоть и необязательно; C-x C-q в неизмененном файле блокирует этот файл, так же, как с RCS в обычном (блокирующем) режиме.
14.7.3.3 Буфер журнальной записи
Когда вы фиксируете изменения, C-x C-q сначала считывает журнальную запись. Она поднимает буфер с именем ‘*VC-Log*’, в котором вы вводите журнальную запись. Когда вы завершили, нажмите C-c C-c в буфере ‘*VC-Log*’. Только тогда происходит действительное фиксирование.
Чтобы прервать фиксирование, просто не набирайте C-c C-c в этом буфере. Вы можете переключать буферы и делать другое редактирование. Пока вы не пытаетесь зафиксировать другой файл, запись, которую вы редактировали, остается в буфере ‘*VC-Log*’, и вы можете в любое время вернуться в этот буфер и завершить фиксирование.
Если вы модифицируете несколько исходных файлов с одной целью, часто бывает удобно указать одинаковую журнальную запись для многих файлов. Чтобы сделать так, используйте историю предыдущих журнальных записей. Предназначенные для этого команды M-n, M-p, M-s и M-r работают так же, как команды истории минибуфера (за исключением того, что они применяются вне минибуфера).
Каждый раз, когда вы фиксируете файл, буфер журнальной записи помещается в режим VC Log, что влечет запуск двух ловушек: text-mode-hook и vc-log-mode-hook. См. Раздел 31.2.3 [Ловушки], с. 349.
14.7.4 Просмотр и сравнение старых версий
Одна из удобных возможностей систем управления версиями — возможность просмотра любой версии файла или сравнения двух версий.
C-x v ~ версия hRETi
Показывает заданную версию файла, к которому вы обратились, в отдельном буфере.
C-x v = Сравнивает текущее содержимое буфера с последней зафиксированной версией этого файла.
C-u C-x v = файл hRETi старая–вер hRETi новая–вер hRETi
Сравнивает две заданные версии файла.
C-x v g Выводит результат команды CVS annotate с использованием разных цветов.
Чтобы просмотреть старую версию in toto, обратитесь к файлу и наберите C-x v ~ версия hRETi (vc-version-other-window). Это поместит текст указанной версии в файл с именем ‘имя–файла.~версия~’ и обратится к нему в новом буфере в отдельном окне. (В RCS, вы также можете выбрать старый буфер и создать из него новую ветвь. См. Раздел 14.7.6 [Ветви], с. 123.)
Но обычно более удобно сравнивать две версии файла с помощью команды C-x v = (vcdiff). Просто C-x v = сравнивает текущее содержимое буфера (сохраняя его в файл, если требуется) с последней зафиксированной версией этого файла. C-u C-x v = с числовым аргументом считывает имя файла и номера двух версий, а затем сравнивает эти версии указанного файла.
Если вы зададите вместо зарегистрированного файла имя каталога, эта команда сравнивает заданные версии всех зарегистрированных файлов в этом каталоге и его подкаталогах.
Вы можете задать зафиксированную версию числом; пустой ввод обозначает текущее содержимое рабочего файла (оно может отличаться от всех зафиксированных версий). Вы также можете задать вместо одного или обоих номеров версий имя снимка (см. Раздел 14.7.7 [Снимки], с. 126).
Эта команда работает путем запуска утилиты diff, передавая ей аргументы из переменной diff-switches. Она показывает вывод в особом буфере в другом окне. В отличие от команды M-x diff, C-x v = не пытается определить позиции различий в старой и новой версиях. Так делается, потому что как правило одна или обе версии не существуют в момент сравнения в виде файлов; они существуют только в записях в мастер-файле. См. Раздел 14.9 [Сравнение файлов], с. 132, для получения большей информации о M-x diff.
Для файлов, управляемых CVS, вы можете посмотреть результат команды CVS annotate с использованием разных цветов для улучшения внешнего вида. Используйте для этого команду M-x vc-annotate. Красным обозначается новое, синим — старое, а промежуточные цвета обозначают промежуточные версии. Префиксный аргумент n задает коэффициент растяжения по временной шкале; он говорит, что каждый цвет покрывает в n раз больший период времени.
14.7.5 Второстепенные команды VC
Этот раздел объясняет второстепенные команды VC; те, что вы могли бы использовать раз в день.
14.7.5.1 Регистрирование файла для управления версиями
Вы можете поместить любой файл под контроль системы управления версиями, просто обратясь к нему и набрав затем C-x v i (vc-register).
C-x v i Регистрирует файл в системе управления версиями.
Чтобы зарегистрировать файл, Emacs должен выбрать, какую систему управления версиями для него использовать. Вы можете указать свой выбор явно, устанавливая vcdefault-back-end в значения RCS, CVS или SCCS. Иначе, если есть подкаталог с именем
‘RCS’, ‘SCCS’ или ‘CVS’, Emacs использует соответствующую систему управления версиями. В отсутствие каких-либо указаний, по умолчанию выбирается RCS, если в системе установлена RCS, иначе SCCS.
Если применяется блокирование, C-x v i оставляет файл неблокированным и запрещает в запись. Наберите C-x C-q, если вы хотите начать в нем редактирование. После регистрирования с использованием CVS вы должны зафиксировать изменения, набрав C-x C-q.
Первоначальной версии вновь зарегистрированного файла присваивается номер 1.1, по умолчанию. Вы можете задать другое значение по умолчанию, устанавливая переменную vc-default-init-version, или вы можете дать C-x v i числовой аргумент; тогда она считывает номер версии для этого конкретного файла в минибуфере.
Если vc-initial-comment отлична от nil, C-x v i считывает начальный комментарий, описывающий предназначение данного исходного файла. Начальный комментарий считывается так же, как журнальные записи (см. Раздел 14.7.3.3 [Буфер журнала], с. 119).
14.7.5.2 Команды VC для выяснения статуса файла
C-x v l Показывает состояние файла в системе управления версиями и историю изме-
нений.
Чтобы просмотреть подробную информацию о статусе версии и историю файла, наберите C-x v l (vc-print-log). Это покажет историю изменений текущего файла, в том числе текст журнальных записей. Вывод появляется в другом окне.
14.7.5.3 Отмена действий над версиями
C-x v u Возвращает буфер и его файл к последней зафиксированной версии.
C-x v c Удаляет последнее внесенное изменение из мастер-файла для файла, к которому вы обратились. Это отменяет ваше последнее фиксирование.
Если вы хотите сбросить ваши текущие изменения и вернуть файл к его последней версии, используйте C-x v u (vc-revert-buffer). Файл остается неблокированным; если используется блокирование, до того, как сможете изменять этот файл, вы должны сначала снова его заблокировать. C-x v u требует подтверждения, если только она не видит, что вы не вносили изменения со времени последего фиксирования.
Источник: Ричард Столмен, Руководство по GNU Emacs

April 12th, 2012
admin
Опубликовано в рубрике
Метки: