7

由于我在网络上的任何地方都找不到上述问题的答案,所以我自己提供了解决方案。这是一个手动过程,但我找不到任何其他标准解决方案。所以这里是:

假设您要从目录work中删除文件test.txt。现在,如果您通过以下方式强行删除 test.txt

rm -rf test.txt

命令然后在工作目录(或其任何父目录)上的下一个 svn up 上,文件将被恢复。所以诀窍也是从.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
4

2 回答 2

8

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

svn update --set-depth exclude <folder-to-delete>
  • 好的
  • 简单的
  • 处理文件

如果出现以下情况,则不好:

  • 我想这不会帮助您避免检查您拥有的 GB 数据(尽管您可以试试这个。)
  • 不适用于切换目录(可能会或可能不会有一点工作,未经测试)
  • 在大型目录上,这不是一个好主意。od_m3表示在190 GB的工作副本上,使用svn 1.6此方法需要1 小时,但svn 1.7需要50 多个小时。这是在 2011 年。

添加:

如果您以后想再次使用该目录,您可以

svn update --set-depth=infinity <folder-to-delete>

我希望我知道如何以这种方式列出已经“排除”的目录,因为st不会显示它们。:D


另一种来自同一来源的方法,来自名为“Mike5”(或 jed/jeds)的人,它适用于目录:

对于您要避免更新的每个目录,请执行

svn switch --ignore-ancestry http://dummy/exists/but/empty_folder some_folder
  • 替换some_folder为您要忽略的文件夹。
  • 还替换http://dummy/exists/but/empty_folder为存储库中的现有路径,该路径是一个空目录,永远不会被更新或删除 - 据说是为此目的创建和专用的。

这样,您将实现:

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

不会达到:

  • 文件上的任何东西
  • 该目录不会消失/被删除(从文件列表中)
  • 摆脱对这些目录的初始签出,除非您使用 'immediates' 签出--depth,首先,执行此操作,然后继续签出(未测试)。
  • 我想您无法摆脱下载已经拥有的 GB 数据(未经测试)。

在专用的空目录上使用也是一个好主意svn propset svn:ignore "*" empty_folder,因此没有人可以向它提交任何内容。

于 2013-08-30T20:49:58.340 回答
-4

它应该很简单:

svn delete test.txt
svn ci -m 'Delete test.txt.'
于 2013-07-11T02:08:52.573 回答