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


132

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

我现在要做的是:

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

如何避免使用svn时也删除本地文件svn rm


Answers:


277

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

$ svn rm --keep-local my_important_file

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


4
一旦他们更新了,那还会不会从其他人的系统中删除它?
Nyerguds

1
@Nyerguds是正确的,因为svn rm正在从存储库中删除文件。如果您希望从存储库中删除文件,但是将其保留在本地计算机上,则可以使用上面的标记。
格雷格·希尔斯顿

6
@GregHilston但是,正如我所说,这在实际的多程序员项目中并没有真正的帮助。应该有一种方法可以仅在各处取消版本控制。这里最常见的情况是意外提交的本地设置文件(在Java项目中很常见),但是取消版本控制不应抹除其他用户的设置文件。
Nyerguds '16

5
@GregHilston在“其他人的系统”中暗含了“实际的多程序员项目”。问题是这样的:其他人进行更新,并覆盖其设置。通常这不是太麻烦,但是很烦人想要解决它。但是到那时,当他们已经覆盖设置并且现在在更新时得到一个svn“ rm”时,它实际上从他们的系统中删除了可能至关重要的本地设置文件,而应该只对其进行版本控制,以便可以将其配置为本地再次设置。
Nyerguds '16

4
从存储库中重新加载较旧的文件会将其标记为来自该较旧的版本,这意味着更新只会再次将其删除。没有干净的方法可以做到这一点,不需要在项目中的所有机器上进行人工干预。
Nyerguds

13

从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

这太丑陋了,很难被称为“解决方案”。尽管如此,它始终允许对以后发生的任何事故进行快速维修。


-3

我没有这个精确问题的答案,但是有一个相关问题的答案,那就是如何从版本控制中删除目录中的所有文件(即不是特定文件),而又不从本地删除它们。该解决方案来自科学Linux实施。

ls -a .svn

应该显示存储控制数据的svn目录。只是:

rm -r .svn

将摆脱这个目录。然后输入:

svn status

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

我希望这有帮助。


有相关问题吗?恕我直言,删除文件和删除整个工作副本是完全不同的事情。
Melebius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.