提交前将文件“取消添加”到svn


200

我正在进行递归svn添加/提交,并且其中包含一个没有适当的忽略属性的文件夹。我现在有大约100个上载的二进制文件的版本,但我尚未提交。

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

Answers:


244

svn revert --recursive folder_name


警告

svn revert从本质上讲是危险的,因为它的全部目的是丢弃数据-即您未提交的更改。还原后,Subversion将无法取回这些未提交的更改。

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


12
要对此进行扩展- revert如果不指定修订版本,则将撤消自上次检出以来指定文件的所有更改,包括添加/删除计划更改。
琥珀

其中folder_name是您在其中执行“添加”命令的文件夹的父文件夹
MacGyver,2013年

28
这个答案很危险,不正确-会通过删除文件的本地副本来撤消更改。Brian Lacy在下面的回答要好得多。
亨利·亨林森

6
伙计们,这回答了原始问题:添加或还原的文件或文件夹,仅返回到未版本控制,而不被删除。这正是问题的所在。如果您在修改后的文件上使用它,那么它当然会还原它们:但这不是问题。这甚至是链接页面上显示的非常具体的用例!
Julien Lebosquain '16

2
@JulienLebosquain好吧,我猜您和我对这句话的理解不同:没有删除所有文档。不幸的是,svn revert它还通过还原最新版本来删除工作副本中新添加的更改HEAD。我删除了我的否决票,但我仍然觉得警告很重要。
jpaugh

145

svn rm --keep-local folder_name

注意:在svn 1.5.4中,即使指定了--keep-local,svn rm也会删除未版本控制的文件。有关更多信息,请参见http://svn.haxx.se/users/archive-2009-11/0058.shtml


9
很高兴知道这一点,因为它使您可以简单地撤消“ svn add”而不会丢失任何更改!
Ryan H.

1
您确定SVN 1.5.4会删除未版本控制的文件吗?该报告不可复制,也没有关于此的其他电子邮件。
昆汀·普拉德

4
如果您要“取消添加”文件,但仍保留它们,这是更好的答案。执行此命令后,文件仍会带有??状态。
罗宾·齐默尔曼

32

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

从文档中:

 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

4
没有!还原是不安全的,因为它会丢失所有本地更改
jpaugh

@jpaugh-这正是我在答案中写的,不是吗?
bobah

1
OP要求的(以及我的期望)是一个在失去本地更改的情况下撤消添加操作的命令。svn revert。这里没有任何答案提到恢复将丢失本地更改的事实。
jpaugh

3

全过程(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
fileToIgnore2.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"

1
谢谢,正是我所需要的。似乎它仅还原了“添加”操作,而不涉及文件内容本身。正如先前对答案的评论所述,我担心丢失本地更改,但似乎没有文件受到损害。
Peter M.-代表莫妮卡'18

1

对于文件- svn revert filename

对于文件夹- svn revert -R folder


4
没有!还原是不安全的,因为它会丢失所有本地更改
jpaugh
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.