RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
CVSup может эффективно корректировать файлы любых типов. Это могут быть даже ноды Unix-устройств, символические связи и жесткие связи. CVSup поддерживает несколько различных алгоритмов для обновления различных файлов и пытается использовать наиболее эффективный метод для каждого файла. Например, файлы RCS корректируются, используя специализированный алгоритм, который пользуется преимуществом их структуры, чтобы существенно уменьшить время коррекции. Регистрационные файлы (которые изменяются, в конечном счете, только посредством добавления нового текста) корректируются специальным алгоритмом, который передаёт только новый текст. Другие текстовые и двоичные файлы могут быть эффективно скорректированы rsync алгоритмом, который встроен в CVSup.
Директория source содержит полные исходные тексты для CVSup. Прочитайте этот текст прежде, чем забирать исходные тексты.
Мы не поставляем CVSup в виде двоичных дистрибутивов, но любой человек может это сделать это в том случае, если его устроит лицензия в файле License, который поставляется вместе с исходными текстами CVSup.
Адрес электронной почты для вопросов и ошибок был изменён для сокрытия от атак спамеров. Вы можете найти его посетив http://www.cvsup.org/contact.html.
Сообщая о проблеме с CVSup, пожалуйста, укажите как можно больше подробностей. Спецификация:
Укажите вывод команды cvsup -v.
Укажите вывод команды uname -a на вашей машине-клиенте и, если это возможно, на машине-сервере.
Включите в письмо ваш supfile.
Включите в письмо "refuse" файлы, если вы их используете.
Укажите командную строку, используемую для запуска CVSup.
Если CVSup говорит о каких-либо ошибках, укажите эти сообщения.
Опишите ваш процесс установки CVSup. Программа была собрана из исходных текстов или вы где-то раздобыли "бинарник"? Если вы используете "бинарник" - укажите каким образом он попал к вам.
Если возможно - включите конфигурационные файлы cvsupd.
Файл RCS содержит множество версий единственного исходного файла, всё в одном месте. В течение срока службы проекта, исходные файлы развиваются. Каждый исходный файл имеет начальную версию. Со временем изменения сделаны в исходных файлах, для того чтобы исправить ошибки и добавить новые (:-))) характеристики. В ключевых моментах, программист хочет сохранить текущие версии исходного файла. Он может сделать это с помощью проверки этого файла с соответствующим ему файлом RCS. Из данного файла RCS в последствии может быть извлечена любая желаемая версия исходного файла. Это облегчает как отмену изменений, которые оказались опрометчивыми, так и воссоздание более ранних версий программного обеспечения.
Хранилище CVS является местом хранения файлов RCS, которые управляются вместе. Например, файлы RCS для всех исходных текстов в проекте должны быть сохранены все вместе в хранилище CVS.
Этот cvsupfile создаст дерево директорий "/usr/src" и заполнит его исходными текстами FreeBSD. Он также создаст дерево "/usr/sup" содержащее файлы checkouts, которые CVSup использует, для поддержки состояния между коррекциями. Если Вы хотите, чтобы ваше дерево исходных текстов располагалось в месте, отличном от "/usr/src", измените описание "prefix=". Если Вы хотите, чтобы файлы checkouts располагались в другом месте (в описании это "/usr/sup"), измените описание "base=".
Убедитесь в том, что вы не пропустили описание "tag=.". Это описание сообщает CVSup, что следует использовать checkout режим, для получения самой последней версии каждого исходного файла.
Нет, так делать не следует. CVSup способен воспринять существующие у вас исходные тексты и внедрить более новые. Если Вас это заинтересовало, то данная ситуация похожа на ту, как если бы Вы обновляли свои исходные тексты с помощью CVSup, но в конце концов почему-то потеряли ваши файлы checkouts. CVSup использует следующий способ, для того чтобы справиться с обеими ситуациями. CVSup использует контрольные суммы, чтобы определить какие исправленные издания файлов у Вас есть к настоящему времени, а затем корректирует их надлежащим образом, чтобы превратить их в самые последние версии.
Следуйте нашим дальнейшим инструкциям для того, чтобы узнать, как это сделать более безопасно.
Да, так и есть. Версии файлов, которые вы хотите получить, намного новее тех, что вы имеете, и число изменений, которые претерпели новые файлы по сравнению с вашими, слишком велико, поэтому есть большой шанс, что Вы пропустите некоторые важные удаления "ненужных" файлов. К счастью, если Вы приблизительно или точно знаете, какие версии файлов Вы имеете, то Вы можете уменьшить или устранить этот риск. Вы делаете обновление дважды. Сначала, Вы сообщаете CVSup, чтобы он "скорректировал" версии тех файлов, которые Вы уже имеете. Эта процедура не изменит ваших файлов, а всего лишь создаст файлы checkouts, которые точно отражают что Вы имеете к настоящему времени. Следующим шагом Вы корректируете файлы, но на этот раз сообщаете CVSup, какая версия Вам действительно нужна. На втором шаге коррекции, CVSup будет иметь всю информацию, которая ему нужна, для того чтобы знать, какие файлы будут удаляться.
В этом небольшом трюке есть пара важных деталей, о которых мы всё ещё не упомянули. Итак, мы лучше предоставим Вам пример. Полагаем, что Вы установили FreeBSD-2.2.5, включая исходные тексты с CD-ROM. Теперь Вам захотелось использовать CVSup, чтобы иметь исходные тексты версии 2.2-stable. Для вашей первой коррекции используйте cvsupfile подобный этому:
Для последующих коррекций, измените последнюю строку на:
src-all tag=RELENG_2_2
Неупомянутые детали в этой последней строке. Прежде всего, где Вы можете узнать какой параметр описания tag следует использовать? Ответ: Вы должны обратиться к списку раздела CVSup главы "Конфигурация" в справочнике FreeBSD для того, чтобы найти список описаний tag, которые можно указать для обновления исходных текстов FreeBSD. Важный момент в том, что описание tag для вашей первой коррекции должно соответствовать версии исходных текстов, которые Вы уже имеете. Описание tag во время вашей второй и последующих коррекций должен соответствовать версии исходных текстов, которые Вы хотите получить.
Второе, что это за дела с ключевым словом "list"? Это описание используется редко, но это - ситуация где это необходимо использовать. Когда CVSup создает или обращается к одному из своих файлов checkouts, он использует имя файла, который по умолчанию базируется на описаниях "release" и "tag". Обычное имя файла checkouts - "checkouts.RELEASE:TAG", где RELEASE и TAG - это "release" и "tag" установочные параметры в вашем cvsupfile.
В достаточно специфической ситуации, которую мы описываем здесь, соглашения присваивания имен для файлов checkouts могут вызвать проблему. По умолчанию, наша первая коррекция должна произвести файл названный "checkouts.cvs:RELENG_2_2_5_RELEASE", а вторая коррекция должна найти файл названный "checkouts.cvs:RELENG_2_2". Для того чтобы вторая коррекция принесла пользу с информацией заложенной в первой коррекции, обе коррекции должны использовать один и тот же файл checkouts. Указание атрибута "list" в первом случае позволит нам выполнить именно это. Он аннулирует встроенный суффикс от имени файла checkouts, и заставляет использовать "специальное" имя, которое будет использоваться при последующих коррекциях.
По всеобщему признанию, это заумно. Но Вы должны сделать это только один раз.
Использование "*default"-подстрок делает ваш cvsupfile более читаемым. Эти подстроки сделают ваш cvsupfile более кратким, если Вы получаете различные наборы файлов.
Такая инструкция дает CVSup право удалять файлы на вашей машине. Например, положим у вас есть файл "foo", который Вы первоначально получили, используя CVSup. Теперь владелец сервера удаляет файл "foo". После этого, когда Вы используете CVSup, если опция "delete" определена в вашем cvsupfile, то CVSup удалит файл "foo" на вашей машине. В противном случае CVSup оставит этот файл.
Вы всегда должны указывать опцию "delete" в вашем cvsupfile, кроме некоторых необычных случаев.
Самое главное - запомнить, что образцы в файлах refuse следует описывать относительно префикса, который чаще всего не является логическим корнем конкретного набора. Для того чтобы определить префикс, посмотрите на ваш cvsupfile. Если он содержит что-то такое:
*default prefix=/some/directory
то это и будет префикс. В этом случае /some/directory - префикс. В противном случае, префикс - такой же, как и base. Чтобы определить base, прочтите это.
Как только Вы определили ваш префикс, зайдите в эту директорию. Вычислите относительные маршруты файлов и/или директорий, которые Вы хотите заблокировать, и сделайте образцы, которые сочетаются с префиксом. Установите эти образцы в ваш refuse-файл, разделяя их пробелом. Положите в refuse-файл каждый получившийся образец в отдельной строке или установите разделитель между образцами. Это точно будет работать.
OK. Полагаем, что Вы используете CVSup, для того, чтобы получить файлы документации FreeBSD (наполнение "doc-all"), используя пример doc-supfile из /usr/share/examples/cvsup. Вот так выглядит cvsupfile (комментарии удалены):
Как Вы видите, префиксом является /usr. Относительно него, наполнение "doc-all" устанавливается в поддиректорию doc, который содержит следующие файлы и подкаталоги:
Теперь будем полагать, что Вы не заинтересованы в испанской, японской, русской и тайваньской версиях документации. Итак, Вы хотите отказаться от директорий, имена которых начинаются с "es", "ja", "ru", и "zh". Формируем корректировку относительно префикса:
Образцы, которые Вы определяете, должны быть похожи на имена файлов на сервере. Если файлы исходят из CVS хранилища (обычный случай), тогда на сервере - файлы RCS. А файлы RCS всегда имеют имена, которые заканчиваются в ",v". Вы должны иметь это в виду.
Например, полагаем, что Вы захотите заблокировать Makefile в вышеуказанном примере. Образец "doc/Makefile" не будет работать, поскольку на сервере файл имеет имя "doc/Makefile,v". Правильный образец, чтобы использовать,
doc/Makefile,v
или (что лучше)
doc/Makefile*
Имя файла на сервере удовлетворяет последнему образцу независимо от того, файл RCS там или нет.
Возможно вы попытались добавить комментарий в ваш refuse файл. Но (сюрприз!) refuse файлы не понимают комментарии. Этот ваш "комментарий" воспринимается за шаблоны, которые содержатся в именах файлов, получаемых вами.
Вот как выглядит неправильный refuse файл:
# Мы принимаем всё (src и ports), исключая games
src/games
Эта безвредно выглядящая строка не комментарий. Это один из 13 шаблонов, включая "#", "src", и "ports". Это скорее всего то, что вы искали.
Может быть когда-нибудь добавить комментарий станет возможно, но сейчас это запрещено.
Сначала Вы должны определить вашу директорию base.
Когда Вы выполняете программу "cvsup", используете ли Вы опцию "-b pathname"? (Большинство пользователей не используют.) Если да, то - pathname является base. В противном случае...
Содержит ли Ваш cvsupfile спецификацию "base=pathname"? (У многих именно так.) Если да, то pathname является base. В противном случае...
base - встроено по умолчанию, "/usr/local/etc/cvsup".
Затем Вы должны определить collDir, поддиректорию base, где CVSup ведёт историю ваших наборов.
Когда Вы исполняете программу "cvsup", используете ли Вы опцию "-c directory"? (Обычно нет.) Если да, то directory является collDir. В противном случае...
У вас collDir - встроено по умолчанию, т.е. "sup".
Наконец, Вы должны знать имя набора, который Вы хотите ограничить, например, "doc-all".
Объедините эти три пункта с разделителем, напишите "refuse" в конце. Здесь и следует держать файл refuse. Пример, которым воспользовались, работает с
/usr/sup/doc-all/refuse
только тогда, когда Вы не используете опции "-b" или "-c".
Вам и вашему дружественному (:-))) администратору сервера следует модернизировать CVSup до версии 15.4 или более поздней. Это решит эту проблему.
CVSup модернизирует файл RCS следующим образом: деконструирует этот файл на сервере, посылает изменившиеся части клиенту, и восстанавливает файл на стороне клиента. (Это похоже на транспортер на предприятии межзвездных кораблей). Затем CVSup сравнивает MD5-контрольную сумму восстановленного файла с подлинником на сервере, чтобы убедиться, что процесс отработал правильно.
К несчастью, последние версии CVS ввели некоторые безвозвратные изменения в формат файлов RCS. Эти изменения касаются пробелов, которые никак не отражаются на логическом значении файла. Тем не менее, как результат, файл RCS, созданный CVSup-клиентом не соответствует побайтно исходному файлу. Даже если восстановленный файл логически идентичен подлиннику, он имеет другую контрольную сумму. Более старые версии CVSup отвергали скорректированный файл и использовали fixup, для того чтобы вновь передать файл целиком.
Для решения этой проблемы, в CVSup 15.4 введено понятие логической контрольной суммы, которая используется только для RCS-файлов. Вместо слепой побайтной обработки контрольной суммы над целым файлом, новый алгоритм контрольной суммы тщательно канонизирует файл так, что несоответствующие различия интервала проигнорированы. Логическая контрольная сумма должна сделать CVSup устойчивым к любым возможным проблемах этого рода.
Скорее всего, Вы находитесь за firewall, который блокирует попытки CVSup-сервера установить второе TCP-соединение к вашему клиенту. Добавьте опцию "-P m" в командную строку cvsup, и все должно заработать.
Да, статически слинкованные исполняемые файлы FreeBSD работают на других *BSD операционных системах. Но на некоторых из них, включая BSD/OS, Вы должны добавить "@M3novm" в командной строке.
CVSup написан на Modula-3, и система использует умный мусорщик, который использует захваты в подсистему VM операционной системы, чтобы приобрести лучшее диалоговое исполнение. Эта характеристика спотыкается на несовместимости между BSD/OS и FreeBSD, вызывая падение в core. Загадочный аргумент "@M3novm" исключает захваты VM, что и делает возможным выполнять исполняемые файлы FreeBSD под другими BSD-подобными операционными системами.
Также, последние версии (4.0 и более поздние) BSD/OS не могут запускать бинарные файлы FreeBSD в формате ELF. Но они могут выполнять старые файлы формата a.out без каких-либо проблем.
***
*** runtime error:
*** Segmentation violation - possible attempt to dereference NIL
*** pc = 0x81f0708 = Cat + 0x18 in /b/jdp/pm3/pm3/libs/m3core/src/text/Text.m3
***
use option @M3stackdump to get a stack trace
Abort trap (core dumped)
Это ошибка в графической библиотеке Modula-3, которая сообщает о неправильной настройке DNS. Если говорить детально, ошибка говорит об отсутствии реверсивной записи в DNS вашего IP адреса. Попробуйте выполнить нижеследующие команды для проверки установок DNS. (Если в вашей системе отсутствует команда "host", используйте "dig" или "nslookup".)
$ hostname
bogus.example.com
$ host bogus.example.com
bogus.example.com has address 192.168.1.1
$ host 192.168.1.1
Host not found, try again.
Последняя строка указывает на проблему. Если ваш DNS установлен правильно, вы должны увидеть следующее
1.1.168.192.IN-ADDR.ARPA domain name pointer bogus.example.com
Правильный путь для устранения этой проблемы - исправить установки DNS. (Соответствующие рекомендации вы можете получить у системного администратора.) Если это невозможно, вы можете устранить эту проблему добавив строку в ваш "/etc/hosts" файл. И всё-таки, если эту проблему невозможно устранить, запустите CVSup клиента без ГПИ (aka GUI) добавив "-g" в командной строке.
Когда-нибудь я устраню эту проблему в графической библиотеке.
Проверьте FTP сервер ещё раз на предмет новых исполняемых файлов. Эта проблема возникает ввиду несовместимости между некоторыми Linux ядрами и некоторыми версиями glibc. Новая версия (распространяется начиная с 20 февраля 2000 года) динамически слинкована с C библиотекой, и она должна работать на разных версиях Linux.
Это странное, на первый взгляд, сообщение говорит вам о том, что памяти не хватает. Попробуйте уточнить лимиты на ресурсы и сделать их побольше. В шеллах, порождённых от sh, используйте "ulimit -Sa" для уточнения параметров "datasize" и "memoryuse". В шеллах, порождённых от csh, используйте команду "limit" для проверки параметров "data seg size" и "max memory size".
Это ошибка в исходных текстах Modula-3 runtime. Заберите новый исполняемый файл с CVSup FTP-сервера. Или используйте это исправление для ваших исходных текстов Modula-3, затем пересоберите и переустановите Modula-3.
Для быстрого устранения проблемы просто запустите CVSup клиента без ГПИ (aka GUI) добавив "-g" в командной строке.
Если вы переместили ваш сайт с таким платформ как FreeBSD, NetBSD, OpenBSD или BSD/OS на не-BSD систему, проблема в файлах отладки ("checkouts"), о которых вы уже слышали. Они содержат некоторую информацию которую не-BSD версии CVSup'а не поддерживают. Эта фишка - ошибка и она присутствует в версиях 16.1 и ниже. Эта ошибка будет исправлена и эта проблема устранится начиная с версии 16.2. До той поры, вам проще обойти эту проблему путём удаления "checkouts*" файлов из вашей base директории, что заставит CVSup переделать эти файлы.
Обычно такое происходит, когда CVSup думает, что следует изменить один или несколько атрибутов файла (права владельца, группы, разрешения и т.п.) но не может этого сделать. Атрибуты файла могут быть неправильными, или записи в файле отладки ("checkouts") могут быть неверными. Проверьте следующее:
Вы иногда выполняете изменения от пользователя root (например, из cron'а), а другие изменения вы производите от другого пользователя. Во время исправления от пользователя root, владельцем файла становится root. А позднее, вы под другим пользователем исправляете эти файлы.
Вы, используя различные установки umask, иногда запускаете CVSup. Простой выход обновить версию CVSup. Добавьте "*default umask=2" (pick your desired value) в начало вашего supfile.
Ваши файлы отладки ("checkouts") в каталоге "base" имеет разрешения, запрещающие CVSup'у писать в них.
Эти странные файлы - файлы RCS, и CVSup прислал их Вам, поскольку ваш cvsupfile сообщил ему об этом. Когда Вы просите CVSup прислать Вам коррекции из CVS-хранилища, есть две абсолютно разные вещи, которые Вы можете потребовать. Во-первых, Вы можете попросить исходные файлы, которые должны извлекаться из хранилища и посылаться Вам. Это, очевидно, то, что Вы хотели. Во-вторых, Вы можете потребовать "сырые" файлы RCS (содержащие все версии исходных текстов), которые также могут быть присланы Вам.
Эти два режима функционирования коренным образом различаются. Оба работают на основе RCS-файлов в CVS-хранилище на стороне сервера. Но они используют RCS-файлы по-разному. Первый режим называется "checkout режим": вызывается конкретная версия исходных текстов из файлов RCS, и эта версия посылается Вам. Второй режим называется "режим CVS". В этом режиме Вам посылаются сами файлы RCS, в той же форме, как и на сервере. В cvsupfile, ключевые слова "tag" и "date" контролируют выбранный вами режим. Если любое из этих ключевых слов присутствует, то CVSup использует checkout режим, чтобы прислать Вам комплект исходных файлов. Если и "tag", и "date" отсутствуют, то CVSup использует режим CVS, чтобы послать Вам файлы RCS.
Если вы хотите получить самые последние версии файлов, то вам следует добавить ключевое слово "tag=." в ваш supfile.
Дело в ошибке, до этого момента находящейся в летаргическом сне. Эта ошибка присутствует во всех версиях до SNAP_16_1d. Вам необходимо обновить как клиентскую, так и серверную части до версии SNAP_16_1d для того, чтобы устранить эту проблему. (Новые версии, которые будут выпущены после SNAP_16_1d, будут содержать исправление этой ошибки.) Подробности и дистрибутив SNAP_16_1d, как в исходных текстах, так и бинарной форме, вы можете получить посетив http://people.freebsd.org/~jdp/s1g/.
Для эффективной корректировки ваших файлов, CVSup должен знать что Вы хотите получить. Он загружает эту информацию в так называемые файлы "отладки" (checkouts). Всякий раз, когда Вы запускаете cvsup, он читает эти файлы, чтобы увидеть какие файлы (и какие исправленные версии этих файлов) Вы имеете. Как только он корректирует ваши файлы, он также корректирует и информацию в checkouts-файлах.
Также checkouts-файлы иногда именуются как "списки" файлов.
Это небольшая проблема. Если CVSup не cможет найти checkout-файл, который ему нужен, он перейдёт к другим методам определения ваших файлов. Один из методов состоит в вычислении контрольных сумм (файловых подписей MD5) для каждого из ваших файлов, и использовании этих контрольных сумм, для вычисления какие исправленные версии файлов Вы имеете. Это действие вполне безопасное, но неэффективное. Оно замедляет скорость коррекции, а также серьёзно загружает сервер.
CVSup обнаружит проблему и завершит свою работу с предложением удалить повреждённый файл, а после этого снова попытаться запустить CVSup. Если Вы последуете этому предложению, он завершит вашу коррекцию, используя методы аварийного перехода, упомянутые выше, и воссоздаст ваш checkout-файл для следующего раза.
Есть ещё одна вещь, которая может произойти, но это не очень существенно. CVSup удалит лишь файлы, которые указаны в его checkouts-файле. Таким образом, если Вы потеряете ваш checkouts-файл, а затем файл "foo" удаляется на стороне сервера, то после выполнения CVSup, ваш файл "foo" не будет удален.
Файл никогда не будет удалён из CVS-хранилища, но, в действительности, это несущественно. Чтобы быть уверенным в полной мере, Вы должны выполнить CVSup как можно раньше, т.е. как только Вы узнали о потере checkouts-файла, немедленно приступите к процедуре коррекции.
Если вы осторожны и если вы понимаете что происходит за сценой, вы можете сделать это. CVSup разрабатывался для локальных проверок в соответствии с RCS файлами, взятыми из основного хранилища. Поскольку CVSup понимает структуру RCS файлов, он может произвести новые исправленные издания с сервера, не мешая вашим собственным исправленным изданиям, которые Вы изменили у себя. К несчастью, определённые логические вопросы делают эту возможность неудобной, для того, чтобы использовать её в практических ситуациях.
Для сохранения локальных исправленных версий в вашей копии хранилища CVS, Вы должны:
Указать CVSup не удалять их.
Гарантировать, что номера версий ваших локальных исправлений не противоречат номерам текущих или будущих исправлений каждого RCS файла на сервере.
Просто удалите ключевое слово "delete" из вашего cvsupfile. Присутствие этого ключа даёт CVSup право удалять исправления из RCS файлов. Также этот ключ разрешает CVSup удалять целиком файлы RCS, при условии, что он создаст их заново. Если вы уберёте ключ "delete", вы предохранитесь от удаления CVSup'ом локально исправленных изданий, а также RCS файлов. Тем не менее, очень важно понимать последствия удаления ключевого слова "delete".
Сначала, положим, что один из множества RCS файлов был удалён из хранилища CVS на стороне главного сервера. Без ключа "delete" CVSup не сможет удалить соответствующий файл в вашей локальной копии. Таким образом Вы будете иметь некоторые файлы RCS в вашем хранилище, которых, в противном случае, там не было бы.
В идеальном мире, это не проблема. Потому что, в идеальном мире никто не удаляет RCS файл из CVS хранилища. Таким образом, такая ситуация не должна возникать никогда.
К несчастью, большинство администраторов управляют своим хранилищем не так идеально, как хотелось бы. Коммиттеры, совершая ошибки, оставляют файлы не там, где следует. Большинство администраторов вручную исправляют такие ошибки, перемещая файлы в хранилище, но некоторые ошибки продолжают жить. Другой пример, в любом большом хранилище, некоторые файлы в конечном счете становятся полностью устаревшими. В итоге, разработчики пожалуются на отсутствие дискового пространства и бардак в хранилище, и администратор хранилища, в ответ на их запрос, удалит файлы.
Обычно, восстановленные RCS файлы не вызывают никаких проблем и их можно благополучно игнорировать. Это особенно верно если администратор хранилища основного сервера был осторожным, чтобы выделить "мёртвые" файлы на всех ветках с выполнением команды "cvs remove" на несколько недель раньше, чем полностью удалить нежелательные файлы RCS. Тем не менее, дополнительные файлы RCS могут вызвать проблемы в некоторых случаях, и Вы должны знать об этом.
Это трудно, поскольку CVS выбирает очередной номер версии сам. Один из путей - немного исправить CVS. Прежде, чем обсуждать это, создайте новую ветку, где вы будете держать ваши локальные изменения. Не пытайтесь проверить ваши локальные изменения в основной ветке или в ветке, которая существует в основном хранилище. Если вы так сделаете, то, скорее всего, рано или поздно, возникнут коллизии.
Если ваши локальные исправленные издания находятся на своей собственной ветке, то проблема сводится к гарантии, что ваша ветка имеет уникальный номер исправленного издания, который никогда не задублируется с номером в основном хранилище. Наилегчайший путь - модифицировать CVS. Версия CVS (в составе дистрибутива FreeBSD) включает такую модификацию. В этой версии, Вы можете влиять на номера исправленных изданий ответвлений, устанавливая внешнюю переменную CVS_LOCAL_BRANCH_NUM.
Эта переменная должна устанавливаться в целое, и CVS будет использовать её, как отправной пункт, выбирая номер для исправленного издания в новых ветках. По умолчанию, CVS распределяет отраслевые номера начинаемые с 1. Следовательно, много большее число, как например, 1000 - хороший выбор. Новые ветки получат меньшие номера, когда ваши собственные локальные ветки получат большие номера исправленного издания. Таким образом эти ветки не будут противоречить друг другу.
Используя этот метод, коммиттеры не должны устанавливать CVS_LOCAL_BRANCH_NUM создавая ветки в основном хранилище.
Если у Вас нет версии CVS, которая поддерживает CVS_LOCAL_BRANCH_NUM, то можно избежать конфликтов с помощью сотрудничества с основным сервером. Просто создайте ветку в основном хранилище, объявите что, она зарезервирована для локальных модификаций, и не используйте её в основном хранилище.
Создайте где-нибудь пустую директорию. Мы будем называть её base. Зайдите в baseи выполните команду mkdir -p sup/test.
Затем, зайдите в sup/test и создайте файл с названием releases с единственной строкой, такой как эта:
cvs list=list.cvs prefix=prefix
В дальнейшем, замените prefix на абсолютный путь к некоторому хранилищу CVS на вашей машине, /usr/cvs. Если у Вас нет хранилища CVS, вы можете использовать любую директорию, содержащую несколько файлов. Но RCS файлы - лучшее средство для тестирования.
В директории, где находится файл releases, создайте файл list.cvs. В нём должна содержаться единственная строка:
upgrade src/bin
Здесь, замените src/bin на некоторый путь к поддереву вашего хранилища CVS, родственному с prefix. Например, если prefix это /usr/cvs в вашем releases файле, и строка в list.cvs такая, как было сказано выше, то поддерево, которое можно будет "забрать", имеет вершину /usr/cvs/src/bin.
Вы только что создали коллекцию CVSup "test" c release названием "cvs". Вы можете запустить сервер так:
cvsupd -b base
заменив base на путь к base директории, которая была создана ранее. Если Вы сделали всё правильно, то cvsupd будет печатать сообщения на stdout, обслужит одного клиента и завершит работу. Для нескольких тестирований подряд, Вам придётся рестартовать сервер несколько раз. Альтернативный путь, запустить сервер так:
cvsupd -b base -C 1 -l /dev/stdout
Сервер станет даймоном и будет обслуживать клиентов до тех пор, пока Вы собственноручно его не убьёте. Замечание, местонахождение рабочей директории не зависит от места запуска сервера.
Сейчас, Вы можете создать отдельную пустую директорию для запуска клиента, для получения дополнений с сервера. Мы назовём эту директорию dest. В dest, создайте файл supfile, который будет выглядеть так:
*default host=localhost
*default base=.
*default release=cvs
*default delete use-rel-suffix
test
(Замечу, что здесь "." в "base=.".) Проверяем, что сервер запущен, а затем, находясь в dest