问题描述
由于我无法在网络上的任何地方找到上述问题的答案,所以我自己提供了解决方案.这是一个手动过程,但我找不到任何其他标准解决方案.所以这里是:
Since I could not find the answer of the above question anywhere in the web, I come with the solution myself. It's a manual process but I couldn't find any other standard solution. So here it is:
假设您要从目录 work 中删除文件 test.txt.现在,如果您通过
Suppose you want to delete the file test.txt from directory work. Now if you delete test.txt forcefully by
rm -rf 测试.txt
命令然后在 work 目录(或其任何父目录)上的下一个 svn 上,文件将被恢复.所以诀窍是从 .svn/entries 文件中删除它,以及.因此,仅从工作副本中删除 test.txt 的完整命令序列是:
command then on the next svn up on the work dir (or any of its parent-directories), the file will be restored. So the trick is to delete it from .svn/entries file, as well. Thus the complete sequence of commands for deleting test.txt only from working copy is:
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
推荐答案
lallafa 报告 一个很好的方法,基于所谓的稀疏目录:
lallafa reports a good method, based on something called sparse directories:
svn update --set-depth exclude <folder-to-delete>
- 不错
- 简单
- 处理文件
- 我想这不会帮助您避免检查您拥有的 GB 数据(尽管您可以尝试这个.)
- 不适用于切换的目录(可能会或可能不会进行一些工作,未经测试)
- 在大型目录上,这不是一个好主意.od_m3 说在 190 GB 工作副本上,使用
svn 1.6
这种方法需要 1 小时,但在svn 1.7
花了 50 多个小时.这是在 2011 年. - I guess won't help you avoid checking out GBs of data you have (although you could try this.)
- doesn't work on switched directories (may or may not with a little work, not tested)
- on large directories, not a very good idea. od_m3 says that on a 190 GB working copy, with
svn 1.6
this method tooks 1 hours, but onsvn 1.7
it tooks more than 50 hours. This was in 2011.
不好:
从来源添加:
如果你以后想再次使用那个目录,你可以这样做
if you later want to use that directory again, you can do
svn update --set-depth=infinity <folder-to-delete>
我希望我知道如何以这种方式列出已经排除"的目录,因为 st
不会显示它们.:D
I wish I knew how can I list directories already "excluded" this way, because st
won't show them. :D
来自名为Mike5"(或 jed/jeds)的人的相同来源,适用于目录:
对于每个要避免更新的目录,请执行
for every directory you want to avoid updating, do
svn switch --ignore-ancestry http://dummy/exists/but/empty_folder some_folder
- 将
some_folder
替换为您要忽略的文件夹. - 还将
http://dummy/exists/but/empty_folder
替换为您存储库中的现有路径,该路径是一个空目录,永远不会更新或删除 - 据称为此目的而创建和专用. - replace
some_folder
with the folder you want to ignore. - also replace
http://dummy/exists/but/empty_folder
with an existing path in your repository which is an empty directory, will never be updated nor deleted - supposedly created and dedicated for this purpose. - 切换的目录不再在工作副本中更新
- 对实际存储库没有更改
- 文件中的任何内容
- 目录不会消失/被删除(从文件列表中)
- 摆脱对这些目录的初始检出,除非您使用
--depth
对立即数"进行检出,首先,执行此操作,然后继续检出(未测试). - 我想您无法摆脱下载已经拥有(未经测试)的 GB 数据.
- anything on files
- the directory won't disappear/be deleted (from file listing)
- getting rid of initial checking out of these directories, unless you do a checkout for 'immediates' with
--depth
, first, do this, and then continue the checkout (not tested). - I guess you cannot get rid of downloading GBs of data you already have (not tested).
这样,您将实现:
您将不会实现:
在专用的空目录上使用 svn propset svn:ignore "*" empty_folder
也是一个好主意,所以没有人可以向它提交任何内容.
It is also a good idea to use svn propset svn:ignore "*" empty_folder
on the dedicated empty directory, so noone can commit anything to it.
这篇关于仅从工作副本中删除文件,而不是从存储库中删除文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!