Перемещение файла в CVS без сброса номера редакции

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

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

6 ответов


невозможно перемещать файлы только с помощью команд клиента. Вам нужен доступ к файловой системе серверов и вы можете переместить файл ",v" в репозитории в новое место. Это сохранит всю историю, так как CVS записывает каждую ревизию и их комментарии в этом одном файле.

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

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

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


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

  1. войдите на сервер, на котором размещен репозиторий CVS и скопировать (не перемещать) файл репозитория из нужного вам местоположения в новое местоположение.
  2. на стороне клиента cvs удалите файл из старого расположения.
  3. на стороне клиента cvs обновляет содержимое каталога в новом местоположении (так что файл появится там).
  4. на стороне клиента выполните принудительную фиксацию cvs (используя флаг-f) скопированного файла для регистрации факта его повторного копирования (добавьте комментарий журнала на этот счет).

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


Ну, самым простым способом было бы acess сервер cvs, где ваше РЕПО и просто перемещать папки / файлы с mv (предполагая, что машина *nix). таким образом, история файла будет сохранена.


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

обычным способом перемещения файла является выдача команды CVS rename.

$ cvs переименовать Старый Новый
$ cvs commit-m "переименован старый в новый"

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

эта функция поддерживается только на серверах CVSNT 2.0.55 и более поздних версий.


разве это не один из известных недостатков CVS - нет встроенного механизма для перемещения файлов? Однако прошло много времени с тех пор, как я использовал его, поэтому, возможно, теперь есть решение.

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


похоже, что вы сохраняете историю версий, чтобы использовать опцию-v при перемещении см. ниже

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

МВ oldfile.c newfile.c cvs удалить oldfile.c cvs добавить новый файл.c

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

cp oldfile.c, v newfile.c, v

Теперь перейдите в свой рабочий каталог и выполните обновление cvs; newfile.с появится как новый файл. Теперь вы можете резюме удалить oldfile.c и совершить.