我不太确定这是怎么发生的,但不知何故,一个完全空的目录层次结构已经在我的存储库中结束了:
com/
com/companyname/
com/companyname/blah/
com/sun/
com/sun/java/
com/sun/java/jax_rpc_ri/
我认为发生的事情是这些目录确实包含文件,但是开发人员意识到他/她不应该首先检查它们,因为这些是构建过程的副产品,所以他/她删除了文件,但不知何故,空目录作为古代遗物留在了存储库中。
如何从CVS中删除此内容?我似乎能够在谷歌上找到的唯一结果是说不应该删除空目录,因为CVS不会首先保留它们,并且-P
(修剪)选项到cvs update
应该从工作目录中删除它们 - 如果你的存储库中实际有空目录,那么这是零帮助。
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是否也有这种奇怪的行为?
答案 0 :(得分:37)
AFAIK CVS协议不允许删除目录。您应该转到服务器控制台并将其从真实的物理存储库中删除。
http://www.network-theory.co.uk/docs/cvsmanual/Removingdirectories.html
您不会删除目录本身; 没有办法做到这一点。
答案 1 :(得分:22)
CVS结帐和更新将始终检出空目录;这就是CVS的构建方式。使用“-P” - “prune”进行更新 - 删除空目录:
cvs update -dP
(添加“-d”将更新自上次更新以来出现的新目录;否则,CVS将忽略它们。)
答案 2 :(得分:8)
刚刚做了
去掉项目中的emptyDirectory。承认内部CVS数据不合法,但似乎有效(cvs版本1.12.13)。
答案 3 :(得分:4)
CVS有许多设计缺陷,永远不能摆脱目录而不丢失历史就是其中之一。在不丢失历史记录的情况下重命名文件和目录的难度是另一个。
考虑毕业到Subversion。 cvs2svn在转换存储库(包括所有分支和标记)方面做得非常好。 CVS和SVN命令集非常相似,只需要很少的调整。 (并且当你使用SVN时,为了成为“你应该使用什么版本控制”战争)你可以转移到任何数量的更高级版本控制系统,例如git或SVK。
答案 4 :(得分:4)
这对我有用。基本上当你做
rmdir -v / CVSROOT / project / emptyDirectory #我们正在从CVS存储库目录中删除目录。
如果您具有存储库unix服务器登录访问权限,则可以前往该路径并删除该目录,或者向unix团队提出同样的问题。
答案 5 :(得分:1)
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
欢呼声,
Rob
答案 6 :(得分:1)
您无法从工作区中删除目录,需要将其从进入保存实际存储库的服务器中删除。但您可以使用cvs remove命令从目录中删除文件。