仅从工作副本中删除文件,但不从存储库中删除

use*_*277 6 svn

由于我无法在网络的任何地方找到上述问题的答案,因此我自己来找解决方案.这是一个手动过程,但我找不到任何其他标准解决方案.所以这里是:

假设您要从目录工作中删除文件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)

n61*_*007 8

lallafa 报告了一种基于稀疏目录的好方法:

svn update --set-depth exclude <folder-to-delete>
Run Code Online (Sandbox Code Playgroud)
  • 不错
  • 简单
  • 适用于文件

如果:不好

  • 我想你不会帮助你避免检查你拥有的GB数据(虽然你可以试试这个.)
  • 不适用于切换目录(可能会或可能不会有一点工作,没有测试)
  • 在大型目录上,不是一个很好的主意.od_m3说,在一个190 GB的工作副本上,svn 1.6这种方法花了1个小时,但花svn 1.750多个小时.这是在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为存储库中的现有路径,该路径是一个空目录,永远不会被更新或删除 - 据称是为此创建和专用的.

通过这个,你将实现:

  • 切换目录不再在工作副本中更新
  • 没有对实际存储库的更改

不会实现:

  • 文件上的任何内容
  • 目录不会消失/被删除(从文件列表中)
  • 摆脱这些目录的初步检查,除非你用'immediates'结账--depth,首先,执行此操作,然后继续结帐(未测试).
  • 我想你无法摆脱已经拥有的GB数据(未经测试).

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)

  • 这是否也应该从 *repository* 中删除,这与 op 想要的完全相反? (4认同)
  • OP 不想从存储库中删除该文件,而这正是该命令的作用。 (2认同)