从CVS中删除空目录?

mat*_*t b 36 cvs

我不太确定这是怎么发生的,但不知何故,一个完全空的目录层次结构最终出现在我的存储库中:

com/
com/companyname/
com/companyname/blah/
com/sun/
com/sun/java/
com/sun/java/jax_rpc_ri/
Run Code Online (Sandbox Code Playgroud)

我认为发生的事情是这些目录中确实有文件,但是开发人员意识到他/她不应该首先检查它们,因为这些是构建过程的副产品,所以他/她删除了文件,但不知何故,空目录作为古代遗物留在存储库中.

如何从CVS中删除它?我似乎能够在google上找到的唯一结果是说不应该删除空目录,因为CVS不会首先保留它们,并且-P(prune)选项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
Run Code Online (Sandbox Code Playgroud)

它还在那里!

SVN也有这种奇怪的行为吗?

Jor*_*ira 38

AFAIK CVS协议不允许删除目录.您应该转到服务器控制台并从真实的物理存储库中删除它们.


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

你不删除目录本身; 没有办法做到这一点.

  • 警告!有必要转到真实的物理存储库,因为一旦CVS丢失了一个目录,它就永远不能再回来了.CVS将已删除的文件存储在名为"Attic"的特殊文件夹中.如果你删除`Attic`那么这些文件将永远丢失. (4认同)

Com*_*ger 22

CVS结账和更新将始终检查空目录; 这就是CVS的构建方式.使用"-P" - "prune"进行更新 - 删除空目录:

cvs update -dP
Run Code Online (Sandbox Code Playgroud)

(添加"-d"将更新自上次更新以来出现的新目录;否则,CVS将忽略它们.)

  • 这只从工作副本中删除空目录 - 我想从存储库中删除它们. (4认同)

小智 8

刚刚做到了

  1. rm -rvf/localCopy/project/emptyDirectory
  2. edit/localCopy/project/CVS/Entries,删除行D/emptyDirectory ////,保存文件
  3. rmdir -v/CVSROOT/project/emptyDirectory

摆脱项目中的emptyDirectory.承认内部CVS数据不合法,但似乎有效(cvs版本1.12.13).


Sch*_*ern 5

CVS 有许多设计缺陷,其中之一就是永远无法在不丢失历史记录的情况下删除目录。在不丢失历史记录的情况下重命名文件和目录是另一个困难。

考虑升级到Subversioncvs2svn在转换存储库(包括所有分支和标签)方面做得非常好。CVS 和 SVN 命令集非常相似,只需要很少的调整。(为了避免这成为一场“你应该使用什么版本控制”战争)一旦你使用了 SVN,你就可以迁移到任意数量的更高级的版本控制系统,例如gitSVK