由于我无法在网络的任何地方找到上述问题的答案,因此我自己来找解决方案.这是一个手动过程,但我找不到任何其他标准解决方案.所以这里是:
假设您要从目录工作中删除文件test.txt.现在,如果你强行删除test.txt
rm -rf test.txt
然后命令在工作目录(或其任何父目录)上的下一个svn上,该文件将被恢复.所以诀窍是从.svn/entries文件中删除它.因此,仅从工作副本中删除test.txt的完整命令序列是:
cd work
rm -rf test.txt
svn st #it shows ! sign beside test.txt which means that
#in the next **svn up** it will be restored
chmod u+w .svn/entries
vi .svn/entries
#delete the lines associated with test.txt
#you need to delete the following 3 lines from .svn/entries
#test.txt
#file
#^L
svn st #it doesn't report test.txt anymore
Run Code Online (Sandbox Code Playgroud)
lallafa 报告了一种基于稀疏目录的好方法:
svn update --set-depth exclude <folder-to-delete>
Run Code Online (Sandbox Code Playgroud)
如果:不好
svn 1.6这种方法花了1个小时,但花svn 1.7了50多个小时.这是在2011年.从来源添加:
如果你以后想再次使用该目录,你可以这样做
svn update --set-depth=infinity <folder-to-delete>
Run Code Online (Sandbox Code Playgroud)
我希望我知道如何列出已经"排除"这种方式的目录,因为st不会显示它们.:d
来自同一来源的另一种方法叫做'Mike5'(或jed/jeds),它适用于目录:
对于您要避免更新的每个目录,请执行此操作
svn switch --ignore-ancestry http://dummy/exists/but/empty_folder some_folder
Run Code Online (Sandbox Code Playgroud)
some_folder为您要忽略的文件夹.http://dummy/exists/but/empty_folder为存储库中的现有路径,该路径是一个空目录,永远不会被更新或删除 - 据称是为此创建和专用的.通过这个,你将实现:
你不会实现:
--depth,首先,执行此操作,然后继续结帐(未测试).svn propset svn:ignore "*" empty_folder在专用的空目录上使用也是一个好主意,因此没有人可以对它做任何事情.
cfo*_*ish -5
它应该像这样简单:
svn delete test.txt
svn ci -m 'Delete test.txt.'
Run Code Online (Sandbox Code Playgroud)