Работа  с файлами – ЧАСТЬ 6

Если для файла применяется  блокирование (как в в случае с 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 = файл hRETстараявер hRETноваявер 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

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий