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

时间:2013-07-10 22:04:30

标签: 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

2 个答案:

答案 0 :(得分:7)

lallafa reports一个很好的方法,基于一个叫做稀疏目录的东西

svn update --set-depth exclude <folder-to-delete>
  • 好的
  • 容易
  • 适用于文件

如果不是很好:

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

source添加:

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

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

我希望我知道如何列出目录&#34;排除&#34;这样,因为st不会显示它们。 :d


来自same source by someone called 'Mike5' (or jed/jeds)的另一种适用于目录的方法:

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

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

通过这个,你将实现:

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

你将实现:

  • 文件上的任何内容
  • 该目录不会被删除/被删除(来自文件列表)
  • 摆脱这些目录的初步检查,除非您为&#39; immediates&#39;使用--depth,首先执行此操作,然后继续结帐(未经过测试)。
  • 我想你无法摆脱已经拥有的GB数据(未经测试)。

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

答案 1 :(得分:-3)

应该如此简单:

svn delete test.txt
svn ci -m 'Delete test.txt.'