SVN可以“忽略”已删除的文件或将其从仓库中删除吗?

5
当我尝试将我的项目提交到svn时,出现了以下问题。
svn: '/var/www/sites/blabla/425/file.png' is scheduled for addition, but is missing

这是由于项目中某些文件被删除(而我无法使用svn删除它们)导致的。是否有一种方法可以让svn忽略这些文件,或者如果找不到它们就将其删除?

4个回答

7
当您执行 svn status 命令时,输出结果会显示任何被标记为“missing”的文件,其行首会以感叹号开头:
!       425/file.png

您应编写一个脚本(使用您选择的脚本语言或命令行 shell),解析此输出,查找以感叹号开头的行,提取文件名,然后执行 svn revert <filename>。这将撤消对该文件的本地更改,使您能够无问题地提交。 编辑:由于您在评论中提到了 PHP 脚本,我假设您熟悉 PHP 脚本。在这种情况下,您可以使用 PHP 函数 svn_status编辑2:如果您想从仓库中删除文件,请改用 svn rm --force <filename>

谢谢你的建议。实际上我正在使用类似的脚本来添加所有新文件:svn status | grep ^? | awk '{print $2}' | xargs svn add。你认为我可以将“?”替换为“!”,“add”替换为“--force delete”吗? - aneuryzm
我实际上已经尝试过了,但它不起作用。抱歉,我忘记提到我不想恢复文件,而是要从存储库中删除它。 - aneuryzm

5

所以你使用svn add添加了文件,但后来手动删除了它?尝试执行以下命令:

svn rm --force file.png

从SVN索引中删除它。


没有自动的方法,你需要手动查找那些已删除的路径,并在它们上面运行 svn rm --force 命令。 - ismail
你所要求的行为是“危险”的。如果你意外地从你的工作区删除了一个文件——那将是一个相当破坏性的反应。 - user483040
是的,我明白这很危险,但我仍然可以接受恢复旧版本的副本。 - aneuryzm
@İsmail 'cartman' Dönmez,我恐怕必须放弃svn,以便保留我的网站的在线副本。你有什么其他建议吗? - aneuryzm
如果你真的非常想要这个,你可以运行 svn status 命令查找那些在文件名前面带有 ! 的文件,并在提交之前删除它们,这些文件是“已添加但现在不存在”的文件。但在我看来,这仍然太危险了。 - ismail
显示剩余5条评论

2

从终端运行以下命令:

svn revert $(svn st | awk 'BEGIN{FS=""} $1=="!" && $2 !~ /\.(sql|log|tmpl)$/ {print $2}')

2

适用于我:

svn status | grep ^\! | awk '{print $2}' | xargs -L1 svn del --force

如果您的文件名中有空格,则无法使用awk,因此我们要剪切到文件名的开头(您可能需要编辑这个:因为我不知道在每个系统上是否必须剪切9个字符):

svn status | grep ^\! | cut -c9- | sed 's/ /\\ /g'| xargs -L1 svn del --force

1
虽然这段代码/片段可能回答了问题,但提供有关它如何以及/或为什么解决问题的附加上下文将改善答案的长期价值。 - Akkusativobjekt
这里需要知道的唯一技巧是使用xargs的-L1选项,以便将执行限制在一行之后。如果不这样做,则可能会导致超出xargs可处理的字符大小。 - Gaspard DESMOULINS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接