撤销 svn add 操作但不还原本地编辑

171

我意外地运行了 svn add * 命令并添加了一堆不应该在仓库中的文件。我还在某些文件中进行了本地编辑,希望保留这些更改。有没有简单的方法只撤销svn add, 而不撤销本地编辑?谷歌上主要的建议是使用svn revert命令,但这会撤销本地编辑。

4个回答

304

那应该是:

svn rm --keep-local

我也遇到了同样的问题。 :-P

很多人评论说你应该使用:

svn rm --keep-local FILENAME

对一个或多个文件应用该命令。(第一个命令会应用于所有内容,可能会产生意想不到的副作用。)


1
这对我没有影响。我从基础文件夹中运行了上述代码(包括尾随句点)。不确定是否有遗漏。 - zzz
8
请注意,你需要将文件名添加到命令中,如下所示:svn rm --keep-local 文件名。如果你很幸运有一个匹配模式,可以使用*匹配多个文件。请注意,翻译后的内容不应该改变原文的意思,且不应包含任何解释性的内容。 - Adam Badura
4
警告!在使用svn外部引用时,使用该命令会同时删除所有已连接的外部引用... - kostja
2
如果您提交此更改,提交将包括从存储库中删除有关文件,对吗? - jwg
1
//,我和jwg有同样的问题。我对一个受SVN控制的文件进行了一些编辑。我想在本地保留这些编辑。然而,我不想完全从仓库中删除该文件。我只是不想将我的本地编辑推送到该文件。 - Nathan Basanese
显示剩余5条评论

35

如果这些文件在一个尚未提交的目录下,你可以通过以下方式从下一次提交中删除整个目录:

svn delete --keep-local /path/to/directory

然而,如果这些文件已经在代码库中,并且现在包含您不想提交的更改,您可以使用变更列表(changelists)提交其余文件:

svn changelist somename /file/to/be/committed
svn commit --changelist somename

8
您可以按以下方式修复您的结帐:
  1. 备份本地文件
  2. 还原SVN检出
  3. 恢复文件
rsync -av --exclude .svn/ YOURDIR/ YOURDIR.bak
svn revert -R YOURDIR
rsync -av YOURDIR.bak/ YOURDIR 

最终命令总是创建一个额外的目录层级,即最终会得到YOURDIR/YOURDIR/,尽管我认为问题在于初始备份命令创建了YOURDIR.bak/YOURDIR/ - James
为了避免rsync需要在源目录后面加上斜杠,我进行了答案的编辑。 - Brice M. Dempsey

3

我曾经遇到相同的问题,我不小心通过使用svn add命令添加了一个包含二进制文件和编译文件的/directory。然而,这个命令实际上会删除该目录。

svn rm --force <directory-name>

在我这种情况下,我不需要该目录,所以删除它是安全的。如果你想要保留这些文件/目录,请在执行该命令之前将它们保存在另外一个地方,然后再将它们复制回来。


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