代码之家  ›  专栏  ›  技术社区  ›  matt b

从cvs中删除空目录?

cvs
  •  34
  • matt b  · 技术社区  · 16 年前

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

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

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

    我如何从简历中删除这个?我在谷歌上能找到的唯一结果是,不需要删除空目录,因为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也有这种奇怪的行为吗?

    7 回复  |  直到 11 年前
        1
  •  36
  •   Jens    12 年前

    afaik cvs协议不允许删除目录。您应该转到服务器控制台,将它们从实际的物理存储库中删除。


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

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

        2
  •  20
  •   Commodore Jaeger    16 年前

    cvs签出和更新将始终签出空目录;这只是cvs的构建方式。使用“-p”--“prune”--进行更新以删除空目录:

    cvs update -dP
    

    (添加“-d”将更新自上次更新以来出现的新目录;否则,cvs将忽略它们。)

        3
  •  7
  •   Ljubomir Josifovski    15 年前

    刚刚做

    1. rm-rvf/localcopy/project/emptydirectory
    2. 编辑/localcopy/project/cvs/entries,删除行d/emptydirectory///,保存文件
    3. rmdir-v/cvsroot/project/emptydirectory/空目录

    以摆脱项目中的空目录。承认不合法地处理内部cvs数据,但似乎有效(cvs版本1.12.13)。

        4
  •  4
  •   Schwern    16 年前

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

    考虑毕业 Subversion . cvs2svn 在转换存储库(包括所有分支和标记)方面做得非常好。cvs和svn命令集非常相似,需要最小的调整。(为了避免这种情况成为“你应该使用什么版本控制”战争),一旦你使用SVN,你可以移动到任何数量的更高级的版本控制系统,如 git SVK .

        5
  •  4
  •   Pramod Jaiswal    14 年前

    这对我有用。基本上当你这样做的时候

    rmdir-v/cvsroot/project/emptydirectory/空目录 #我们正在从cvs存储库目录中删除目录。

    如果您具有存储库Unix服务器登录访问权限,则可以访问路径并删除目录,或者向Unix团队提出同样的问题。

        6
  •  1
  •   Jens    12 年前

    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
    

    我确保这两个目录中的所有内容都是最新的,其中包含了我想要保留的内容。然后我把我的项目从沙盒里吹走。

    然后我删除空目录 从存储库本身 .

    返回并检查相同的工作区,例如,我的项目将给我没有空脏的工作区。

    或者只是保持原样,使用-p选项让cvs检查所有内容(或者更新所有内容),然后删掉空目录。

    高温高压

    干杯,

    抢劫

        7
  •  1
  •   SteveScm    11 年前

    不能从工作区中删除目录,需要将其从保存实际存储库的服务器中删除。但可以使用cvs remove命令从目录中删除文件。

    推荐文章