Вопрос

Я не совсем уверен, как это произошло, но каким-то образом в моем репозитории оказалась совершенно пустая иерархия каталогов:

com/
com/companyname/
com/companyname/blah/
com/sun/
com/sun/java/
com/sun/java/jax_rpc_ri/

Я думаю, что произошло то, что в этих каталогах действительно были файлы, но затем разработчик понял, что ему / ей не следовало проверять их в первую очередь, поскольку это побочные продукты процесса сборки, поэтому он / она удалил файлы, но каким-то образом пустые каталоги остались в репозитории как древние реликвии.

Как я могу удалить это из CVS?Единственные результаты, которые я, кажется, смог найти в Google, говорят о том, что не должно быть необходимости удалять пустые каталоги, поскольку CVS не будет хранить их в первую очередь, и что -P (обрезать) варианты для cvs update следует удалить их из рабочего каталога - что не поможет, если у вас действительно есть пустые каталоги в вашем репозитории.

A cvs remove и cvs commit похоже, он не заботится об этой ситуации:

$ cvs remove -Rf com
cvs remove: Removing com
cvs remove: Removing com/companyname
cvs remove: Removing com/companyname/blah
cvs remove: Removing com/sun
cvs remove: Removing com/sun/java
cvs remove: Removing com/sun/java/jax_rpc_ri
$ cvs commit com
cvs commit: Examining com
cvs commit: Examining com/companyname
cvs commit: Examining com/companyname/blah
cvs commit: Examining com/sun
cvs commit: Examining com/sun/java
cvs commit: Examining com/sun/java/jax_rpc_ri
$ ls -l com
total 24
drwxrwxr-x  2 matt matt 4096 Oct 15 14:38 CVS
drwxrwxr-x  9 matt matt 4096 Oct 15 14:38 companyname
drwxrwxr-x  4 matt matt 4096 Oct 15 14:38 sun

Он все еще там!

У SVN тоже такое странное поведение?

Это было полезно?

Решение

AFAIK протокол CVS не позволяет удалять каталоги.Вам следует зайти в консоль сервера и удалить их из реального физического хранилища.


http://www.network-theory.co.uk/docs/cvsmanual/Removingdirectories.html

Вы не удаляете сам каталог;нет никакого способа сделать это.

Другие советы

Проверка и обновление CVS всегда будут проверять пустые каталоги;просто так устроено CVS.Выполните обновление с помощью "-P" -- "prune" -- для удаления пустых каталогов:

cvs update -dP

(Добавление "-d" обновит новые каталоги, которые появились с момента вашего последнего обновления;в противном случае CVS проигнорирует их.)

Только что сделал

  1. rm -rvf /localCopy/проект/Пустой каталог
  2. редактировать /localCopy/project/CVS/Записи, удалить строку D/emptyDirectory////, сохранить файл
  3. rmdir -v /CVSROOT/проект/Пустой каталог

чтобы избавиться от emptyDirectory в проекте.Признаю, что не совсем законно возиться с внутренними данными CVS, но, похоже, сработало (версия cvs 1.12.13).

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

Подумайте о том, чтобы перейти на Подрывная деятельность. cvs2svn делает очень хорошую работу по преобразованию репозиториев, включая все ветви и теги.Наборы команд CVS и SVN очень похожи и требуют минимальной настройки.(И чтобы предотвратить превращение этого в войну "какой контроль версий вам следует использовать") после того, как вы используете SVN, вы можете перейти на любое количество более продвинутых систем контроля версий, таких как мерзавец или SVK.

У меня это сработало.В основном, Когда вы делаете

rmdir -v /CVSROOT/проект/Пустой каталог # Мы удаляем каталог из каталога репозитория CVS.

Если у вас есть доступ для входа на сервер репозитория unix, вы можете перейти по указанному пути и удалить каталог или сообщить о том же в unix team.

cvs, как правило, работает по двухэтапному подходу к каталогам, поэтому для многих команд cvs есть опция -P для "Удаления пустых каталогов".

Когда это произошло, напримерхотите переименовать каталог, который я только что добавил, я удаляю каталог, удаляю запись для каталога в файле CVS / Entries, это будет строка, перед которой стоит буква "D".

Работа сделана.

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

Например, в

~/Sandbox/my_project/some_stuff_i_want
~/Sandbox/my_project/empty_dir_1
~/Sandbox/my_project/other_stuff_i_want

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

Затем я удаляю пустые каталоги из самого репозитория.

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

Или просто оставьте все как есть и используйте опцию -P, чтобы заставить CVS проверить все (или обновить все), затем удалите пустые каталоги.

HTH

ваше здоровье,

Роб

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top