如何在SVN工作副本中仅还原目录?

17
我想要将SVN工作副本中的目录和所有子目录回滚到与存储库匹配,但我不想触碰这些目录内部的任何文件。
我的一个SVN应用程序递归地在工作副本中的每个目录上设置了一个SVN属性,但是我希望还原这些更改,以防止它突出显示它们并尝试将更改提交到SVN属性。仅将其更改以匹配HEAD无效。
有任何想法吗?我已经阅读了各种SVN资源,但没有一个似乎处理这种边缘情况。

谢谢回复。任何Shell都可以。这是一个Windows系统,但我有Bash。 - Rushyo
你应该真正改变你已经接受的答案。 - New Alexandria
2
为什么?我接受的那个完全合适。得到40多个赞的那个答案并没有回答问题。阅读它。思考一下。再读一遍。测试一下。 - Rushyo
4个回答

104

适用于所有平台:

svn revert . --recursive

(请注意,这将还原所有东西,不仅仅是目录。)


2
@Petrucio 这也会触及文件吗?我不想递归地还原当前目录下的所有内容,只想还原目录。引用Greg Stein的话:“但是对目录进行递归还原可能会还原比您想象的更多(将其下所有文件和目录的本地修改都丢弃)。”假设这适用的话,结果将是完全破坏我的工作副本。哎呀。 - Rushyo
11
由于版主拒绝删除这个内容: *** 如果您遇到了和我一样的问题,请不要执行此操作,否则会破坏您的工作副本 *** - Rushyo
4
如果我们需要更多的证据表明人们投票是基于漂亮而非实际运作的代码,那太惊人了。 - Rushyo
@Rushyo,不必对这个答案感到如此沮丧。如果它没有解决你的问题,那就不要将其标记为答案-没有必要请求删除或提供讽刺的言辞。你没有充分解释你的问题。你应该解释说你不想恢复文件,而是说你不想触碰文件(即更改文件的时间戳)。很明显,这个命令会递归地还原目录下的所有内容。 - javajavajavajavajava
1
不幸的是,当你在谷歌上搜索“svn递归还原”时,这就是第一个出现的结果,如果是这种情况,那么这个答案是正确的。我建议如果可能的话更改问题标题。 - Interarticle
显示剩余3条评论

9

您可以使用findsvn revert相结合:

find . -type d | grep -v .svn | xargs svn revert

除非您使用-R选项(相当于--depth=infinity),否则不会触及目录内的任何文件。


2
首先,在其他安全的地方备份你的工作副本。 :)
你可以使用以下命令编辑svn工作副本的属性:
REM Delete all mergeinfo properties recursively
svn propdel svn:mergeinfo -R

1

在Windows命令行中,您可以执行以下操作:

for /d /r %i in (*) do svn revert %i

如果您从批处理文件中调用,请改用%%i请先备份!

此命令是不太安全的,将遍历所有目录,即使是未修改的目录或不在svn下的目录。 您可以使用类似这样的Ruby脚本以更清晰的方式执行:

`svn st`.split("\n").grep(/^ M\s+(.*)/) { $1 }.find_all { |i| File.directory? i }.each do |i|
  system "svn revert #{i}"
end

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