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

时间:2009-03-31 17:51:08

标签: svn

在perforce中,您可以发出'sync to none'命令从客户端删除文件,但不要在软件仓库(或svn lingo中的存储库)中保持不变。

  

p4 sync ... #non

svn中是否有类似的命令?


修改

感谢那些迄今已回答的人。

澄清:

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

'p4 sync ... #non'命令允许我从软件仓库/存储库中的客户端删除文件,并仅保留本地文件。

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

7 个答案:

答案 0 :(得分:3)

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

此外,从版本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

答案 1 :(得分:1)

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

您可以编写一个脚本来遍历所有文件并在其上调用“svn status”,删除“svn status”为空输出的文件...


编辑:一个简单的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 :(得分:1)

如果您只想删除存储库中的文件而不是仅删除本地可用的文件,您可以使用简单的shell脚本(在Linux / cygwin上)删除

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

注意:删除echo以真正删除任何内容)。

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

答案 3 :(得分:1)

使用Subversion 1.6.0

svn update --set-depth exclude <file>

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

答案 4 :(得分:0)

使用TortoiseSVN,您可以创建本地化到该计算机的忽略模式。不确定这是否适合您的情况。

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

答案 5 :(得分:0)

使用

svn rm folderToDelete --keep-local

使用TortoiseSVN,按住Shift键同时右键单击文件夹以显示extended menu,然后选择“删除(保持本地)”。

答案 6 :(得分:0)

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

在乌龟中:右键单击 - > tortoiseSVN->创建补丁。您可以稍后将此修补程序文件应用于另一个工作副本。

聚苯乙烯。你没有提到为什么要这样做,但上述内容可能最终成为你真正需要的东西。