代码之家  ›  专栏  ›  技术社区  ›  grieve

是否有仅从客户端删除文件的svn命令?

svn
  •  4
  • grieve  · 技术社区  · 16 年前

    在性能方面,您可以发出“同步到无”命令,从客户机中删除文件,但不要在仓库(或svn-lingo中的存储库)中对它们进行任何操作。

    P4同步…无

    在SVN中有类似的命令吗?


    编辑:

    多亏了那些迄今为止的回答。

    澄清:

    我不想在目录上使用rm-rf,因为它将删除所有文件,甚至只删除本地文件。我也不想手动删除客户机和存储库中的单个文件。

    “p4 sync…none”命令允许我从客户机中删除仓库/存储库中的文件,只保留本地文件。

    对于一组小文件来说,这不是什么大问题,但是对于许多文件来说,手工操作是很痛苦的。

    7 回复  |  直到 16 年前
        1
  •  1
  •   snemarch    16 年前

    所以您基本上想要删除所有版本化和未修改的文件?

    您可以编写一个脚本,该脚本遍历所有文件并对其调用“svn status”,删除“svn status”给出空输出的文件…


    编辑:用于删除未修改文件的na_ve python脚本。保留未版本化和本地修改的文件…这是 缓慢的 ,最好发布一个“svn stat-v”并解析它。该脚本只删除文件,不接触文件夹。

    import os
    from subprocess import *
    
    def isUnchangedInRepo(name):
        output = Popen(["svn","stat",name], stdout=PIPE).communicate()[0]
        return len(output) == 0
    
    for dirname, dirnames, filenames in os.walk('.'):
        for filename in filenames:
            testfile = os.path.join(dirname, filename)
            if(testfile.find("\\.svn") == -1) and isUnchangedInRepo(testfile):
                print testfile
    #           os.remove(testfile)
    
        2
  •  3
  •   M4N    16 年前

    您只需在本地删除文件(使用操作系统的delete命令)。但是,下次更新工作副本时将重新创建该文件。

    此外,从1.5版开始,您可以进行稀疏签出,在这里您可以省略将存储库的某些部分写入工作副本。但如果我没记错的话,这只适用于目录,而不是单个文件。

    以下是发行说明中描述稀疏签出特性的部分: http://subversion.tigris.org/svn_1.5_releasenotes.html#sparse-checkouts

    下面是SVN手册的相应章节: http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html

        3
  •  1
  •   Martin Carpella    16 年前

    如果您只想删除存储库中的文件,而不是只在本地可用的文件,那么您可以使用一个简单的shell脚本(在Linux/cygwin上)来执行此操作。

     svn  st -v | cut -c '41-' | xargs echo rm
    

    ( 注: 移除 echo 删除任何内容)。

    但是,无论本地修改状态如何,这都将删除存储库中的任何文件。

        4
  •  1
  •   Bert Huijben    16 年前

    有1.6.0版本

    svn update --set-depth exclude <file>
    

    这将从工作副本中删除该文件,并标记该文件在更新时不应返回。

        5
  •  0
  •   WimpyProgrammer    16 年前

    使用Tortoissesvn,可以创建一个定位到该机器的忽略模式。不确定这是否适合你的情况。

    很好的概述 http://arcware.net/tortoisesvn-global-ignore-pattern-vs-svn-ignore/ .

        6
  •  0
  •   Stefan    16 年前

    使用

    svn rm folderToDelete --keep-local
    

    使用Tortoissesvn,按住SHIFT键,同时右键单击文件夹以调出 extended menu ,然后选择“删除(保留本地)”。

        7
  •  0
  •   eglasius    16 年前

    或者创建一个补丁。这将在补丁文件中记录所有本地更改。

    在Tortoise中:右键单击->Tortoissesvn->创建补丁。以后可以将此修补程序文件应用到另一个工作副本。

    附言:你没有提到你为什么要这样做,但以上可能是你真正需要的。