2010-05-25 147 views
162

我正在做一个递归的svn添加/提交,并没有包含适当的忽略属性的文件夹。我现在有大约100个上传的二进制文件版本,但我还没有承诺。“unadd”一个文件提交之前svn

在不删除所有文档的情况下,“撤消”这个最简单的方法是什么?

回答

214

使用svn revert --recursive folder_name


警告

svn revert本身是非常危险的,因为它的全部目的是要扔掉的数据  —即,您提交的更改。一旦你恢复,Subversion提供没有办法找回那些未提交的更改。

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html

+12

要进一步扩展 - 没有指定修订版本的'revert'将撤消自上次结帐以来发生的对指定文件的任何更改,包括添加/删除调度更改。 – Amber 2010-05-25 17:32:04

+0

其中folder_name是您执行“添加”命令的文件夹的父文件夹 – MacGyver 2013-08-10 21:56:17

+16

此答案危险地不正确 - 它将通过删除文件的本地副本来取消您的更改。 Brian Lacy的回答下面好多了。 – 2016-05-19 12:04:21

26

尝试svn revert filename为您不需要和尚未提交的每个文件。或者对于有问题的文件夹执行svn revert -R folder,然后使用正确的忽略配置重新执行操作。

From the documentation:

you can undo any scheduling operations: 

$ svn add mistake.txt whoops 
A   mistake.txt 
A   whoops 
A   whoops/oopsie.c 

$ svn revert mistake.txt whoops 
Reverted mistake.txt 
Reverted whoops 
+1

不!恢复是不安全的,因为它会丢失所有本地更改 – jpaugh 2016-05-24 16:34:23

+0

@jpaugh - 这正是我在答案中写的,不是吗? – bobah 2016-05-24 17:37:07

+0

OP要求的内容(以及我期望的内容)是一个撤销add *的命令,不会丢失本地更改。 'svn恢复'。这里的答案都没有提到这个事实,即地方变化将会由于恢复而失去。 – jpaugh 2016-05-24 18:57:14

113

svn rm --keep-local folder_name

注:SVN 1.5.4 SVN RM指定--keep本地时甚至删除版本文件。有关更多信息,请参见http://svn.haxx.se/users/archive-2009-11/0058.shtml

+7

这是很好的知道,因为它允许您只需撤消“svn add”而不会丢失更改! – 2012-01-20 14:18:43

+1

你确定SVN 1.5.4删除了未版本控制的文件吗?该报告无法复制,并且没有其他电子邮件。 – 2013-10-17 08:29:54

+3

这是更好的答案,如果你想“取消”文件,但仍然保留它们。在这个命令后,这些文件仍然会在那里?状态。 – 2014-10-03 18:46:49

1

有关文件 - svn revert filename

的文件夹 - svn revert -R folder

+2

不!恢复是不安全的,因为它会丢失所有本地更改 – jpaugh 2016-05-24 16:34:27

0

全过程(Unix的SVN包):

检查文件不在SVN:

> svn st -u folder 
? folder 

添加所有(包括忽略文件):

> svn add folder 
A folder 
A folder/file1.txt 
A folder/folder2 
A folder/folder2/file2.txt 
A folder/folderToIgnore 
A folder/folderToIgnore/fileToIgnore1.txt 
A fileToIgnore2.txt 

删除 “添加” 标志的所有*忽略*文件:

> cd folder 

> svn revert --recursive folderToIgnore 
Reverted 'folderToIgnore' 
Reverted 'folderToIgnore/fileToIgnore1.txt' 


> svn revert fileToIgnore2.txt 
Reverted 'fileToIgnore2.txt' 

编辑SVN忽略文件夹

svn propedit svn:ignore . 

加入两条单曲线只用了以下内容:

folderToIgnore 
fileToIgnore1.txt 

检查哪些文件将被上传和提交:

> cd .. 

> svn st -u 
A folder 
A folder/file1.txt 
A folder/folder2 
A folder/folder2/file2.txt 


> svn ci -m "Commit message here"