如何从版本控制中删除文件而不删除它?

时间:2010-08-26 21:23:44

标签: svn version-control

如果我运行svn rm file,则会从本地工作副本中删除该文件。

我现在所做的是:

$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file

使用svn rm

时,如何避免svn删除本地文件?

3 个答案:

答案 0 :(得分:265)

您需要--keep-local命令行选项。这将从版本控制中删除该文件,而不将其从文件系统中删除。

$ svn rm --keep-local my_important_file

注意: --keep-local仅影响副本的svn rm。其他用户可能会删除其自己的文件本地副本,除非他们的本地副本与存储库之间由于更改而发生冲突。这可能不是理想的结果。见下面的评论。

答案 1 :(得分:12)

从SVN中删除文件而不在本地删除它无处不在是一个常见问题。一个突出的例子是Eclipse项目中的.classpath文件。只要项目中使用的所有计算机都具有相同的Eclipse和Java安装,将此配置文件放在SVN下就是了不起的。一旦违反此条件,提交就会开始破坏其他Eclipse项目。这是必须从SVN删除文件而不删除ist的点。

svn rm --keep-local .classpath

在一台机器上完成工作,并在那个时间完成。

问题是其他机器可能丢失该文件(更新时)或复活它(在提交时)。 SVN的缺陷既不是处理存储库中的--keep-local也不是为了将其传播到其他工作副本。因此,在所有其他机器上面必须执行命令 - 最好在任何提交或更新之前。

当然,这至多可以达到90%。删除和重新版本将突然发生。我的解决方案是让每台机器,我有直接或间接访问,做

svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine

这很难被称为"解决方案"。然而,它总是允许快速修复任何后来的事故。

答案 2 :(得分:-2)

我对这个确切的问题没有答案,但我确实得到了一个相关问题的答案,即如何从版本控制中删除目录中的所有文件(即非特定文件)而不在本地删除它们。该解决方案来自Scientific Linux实施。

ls -a .svn

应显示存储控制数据的svn目录。简单地:

rm -r .svn

将摆脱此目录。然后输入:

svn status

将产生'警告:此目录不是工作副本'错误,因为它不再受版本控制。

我希望这会有所帮助。