svn是否有一个“全部还原”命令?


159

如果要放弃所有更改,然后返回存储库中的代码,请执行以下操作:

$ rm -fr *
$ svn up

这很容易,但是我想知道是否有单个命令可以完成此任务,例如:

$ svn revert-all

谁使用-fr而不是-rf?有一个原因叫它rimraf,而不是rimfer。
Jimmy Hoffa

@JimmyHoffa是什么原因?
埃里克·威尔逊

3
大会的威尔逊!惯例,先生!没有我们的纪律和文化传统,我们不过是野蛮人!我说,早上好先生!
吉米·霍法

Answers:


306

您可以这样做:

svn revert -R .

这不会删除任何不受版本控制的新文件。但是您可以轻松编写一个shell脚本来做到这一点,例如:

for file in `svn status|grep "^ *?"|sed -e 's/^ *? *//'`; do rm $file ; done

2
欢迎使用SO,并感谢您提供详尽的答案,因为svn revert -R它不等同于我给的两个命令。
埃里克·威尔逊

1
要删除Windows命令行中不受版本控制的所有文件,答案在这里:stackoverflow.com/a/1502365/1385429
Christiaan Westerbeek 2014年

用户mashzo指出(在现已删除的答案中),该-R标志对于确保删除未版本化的目录也可能是必需的,这是丢弃所有更改的一部分。如果您认为合适,请考虑将其纳入您的答案。
杰里米·班克斯

27

有一个命令

svn revert -R .

或者,
您可以使用--depth = infinity,它实际上与上面的相同:

svn revert --depth=infinity 

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


7
-R等同于--depth=infinity
Michael Burr

4
您的cmd“ svn revert -R”缺少语法中的当前目录。它应该是“ svn revert -R”。
boddhisattva 2014年

目前,该帖子听起来像是-R在不出现--depth-infinity时相互排斥。
ahnbizcad

@ahnbizcad那两个确切的同义词不是吗?
Nyerguds

这就是我的意思。这个答案使两者听起来很不一样。“互斥” =同义词的反义词
ahnbizcad '16


0

要还原修改的文件:

sudo svn revert
svn status|grep "^ *M" | sed -e 's/^ *M *//'

我认为我的格式更改代表了您想要的。如果您不喜欢,请回滚。谢谢,很高兴记住SVN的糟糕日子... :)
Eric Wilson
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.