Подтвердить что ты не робот

Как вернуться к предыдущей фиксации в CVS

По старым причинам я использую CVS для проекта. Недавно я совершил некоторые изменения, которые нарушили наш код, и мне нужно было их вернуть. Какой CVS-аналог git revert -r <old_revision>?

Глядя на прошлые вопросы, такие как Как вернуть большие изменения, коммиты CVS не группируют файлы, которые были изменены. Единственный способ вернуться с помощью дат?

Кроме того, какой лучший способ просмотреть прошлые изменения? CVS log выводит слишком много информации, большинство из которых не нужно. Я хочу видеть сообщения фиксации и измененные файлы.

4b9b3361

Ответ 1

Документацию CVS можно найти здесь, но из этого сайт он сообщает, как вернуть один файл:

СОХРАНЕНИЕ СТАРШЕЙ ВЕРСИИ ТЕКУЩАЯ ВЕРСИЯ

Сохраните версию "oldfile" на что-то еще и проверьте "текущую" версию.
 Примечание: вам нужно еще выполнить обновление -A, чтобы получить текущую версию, потому что даже если у вас есть > переименовано   "oldfile" тег по-прежнему связан с файлом "oldfile" и не удаляется до > обновления -A.

Затем переименуйте "старую" версию в "текущую" версию.
          % mv oldfile oldfile.old.ver
          % cvs update -A oldfile
          % mv oldfile.old.ver oldfile
          % cvs commit -m "возврат к версии 1.5" oldfile

Теперь вы можете продолжить проверку, редактирование и передачу файла как обычно.

Это не будет обрабатывать многие файлы рекурсивно, но, надеюсь, поможет.

Ответ 2

Чтобы отменить ревизию одного файла, используйте cvs admin -o.

Подробнее см. документацию CVS (info cvs, если вы используете Unix-подобную систему), или см. эту ссылку.

Цитата из руководства:

`-oRANGE'
     Deletes ("outdates") the revisions given by RANGE.

     Note that this command can be quite dangerous unless you know
     _exactly_ what you are doing (for example see the warnings below
     about how the REV1:REV2 syntax is confusing).

     If you are short on disc this option might help you.  But think
     twice before using it--there is no way short of restoring the
     latest backup to undo this command!  If you delete different
     revisions than you planned, either due to carelessness or (heaven
     forbid) a CVS bug, there is no opportunity to correct the error
     before the revisions are deleted.  It probably would be a good
     idea to experiment on a copy of the repository first.

Затем он дает несколько способов указать версию или диапазон исправлений для удаления.

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

Если вам не нужно менять историю, как это, просто возьмите копию старой версии и проверьте ее поверх плохой ревизии, как предлагает Dave M.

И вы правы, акцент CVS на отдельные файлы; более современные системы, как правило, подчеркивают состояние всего хранилища.

Пока все это позволяет обрабатывать только один файл за раз.

Но вы можете проверить весь модуль на указанную дату в отдельный каталог (cvs checkout -D date), а затем скопировать файлы поверх текущей копии модуля и проверить все. Если вы это сделаете, убедитесь, что сделать "cvs diff", чтобы вы точно знали, какие изменения вы делаете.

Я не знаю, как лучше получить более краткий журнал. cvs log без аргументов дает вам журнал для каждого файла, а не в хронологическом порядке. cvs log filename дает вам журнал для указанного файла, но не относится к другим файлам, которые могут быть изменены в одно и то же время. Лично я мог бы подумать над написанием Perl script, который собирает информацию, напечатанную cvs log, и переупорядочивает ее для отображения, но это, вероятно, больше работы, чем вам интересно.

Есть инструменты для импорта репозиториев CVS во что-то более современное.

Ответ 3

Вот команды.

1) ложное совершение

2) проверьте его последнюю версию.

cvs log file.txt

позволяет сказать, что версия 1.25 является последней версией из-за ложной фиксации, поэтому мы хотим вернуться к своей старой версии 1.24.

3) Итак, давайте двигаться вперед, как показано ниже.

cvs update -r 1.24 file.txt // checkout older version
cp file.txt old.txt // create backup
cvs update -A file.txt // again move to latest one
cp old.txt file.txt // replace old to at latest one.
cvs status file.txt // It will shows as locally modified.
cvs commit -m "Reverting false commit"  file.txt
cvs log file.txt // new 1.26 will be created.

4) Чтобы убедиться, что diff отличается тем, что 1.26 и 1.24 являются одинаковыми.

cvs diff -r 1.26 -r 1.24 file.txt 

Если все вышеописанные шаги верны, diff не будет показывать разницы.

Ответ 4

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

У меня было то, что я думаю, это аналогичная ситуация, и я сделал следующее, которое повлияло на всю папку, а не на файл:

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

Этот подход нуждается в изменении, если какие-либо файлы были добавлены/удалены между старой версией и текущей версией.

История CVS покажет реверсию.

Ответ 5

cvs update -j 1.6 -j 1.5 Filename.java