Чтобы отменить ревизию отдельного файла, используйте cvs admin -o
.
Но ответ Дэйва М, вероятно, вам нужен.
Я должен подчеркнуть (пересматривая этот ответ через 8 лет после того, как я впервые его написал), что это не эквивалентно git revert
. Команда git revert
создает новую фиксацию, которая отменяет эффект предыдущей фиксации. Команда 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.
Затем он дает несколько способов указать ревизию или диапазон ревизий для удаления.
Как говорится, это может быть довольно опасно; он стирает информацию из репозитория, что обычно и пытается предотвратить любая система контроля версий.
Если вам не нужно изменять историю таким образом, просто возьмите копию более старой версии и проверьте ее поверх плохой версии, как предлагает ответ Дэйва М.
И вы правы, CVS делает упор на отдельные файлы; более современные системы имеют тенденцию подчеркивать состояние всего хранилища.
Пока все это позволяет обрабатывать только один файл за раз.
Но вы можете извлечь весь модуль по состоянию на указанную дату в отдельный каталог (cvs checkout -D date
), затем скопировать файлы поверх вашей текущей копии модуля и проверить все. Если вы это сделаете, обязательно выполните "cvs diff ", чтобы вы точно знали, какие изменения вы вносите.
Я не знаю хорошего способа получить более сжатую информацию журнала. cvs log
без аргументов дает вам журнал для каждого файла, а не в хронологическом порядке. cvs log filename
дает вам журнал для указанного файла, но не связывает его с другими файлами, которые могли быть изменены одновременно. Лично я мог бы подумать о написании сценария Perl, который собирает информацию, напечатанную cvs log
, и переупорядочивает ее для отображения, но это, вероятно, больше работы, чем вам интересно.
Есть инструменты для импорта репозиториев CVS в нечто более современное.
person
Keith Thompson
schedule
05.02.2012