我有一个SVN工作目录。我在该目录中进行了一些更改,它显示在svn status
中。但有没有办法让我删除那里的所有更改,并使用命令行从主干获取所有内容?
答案 0 :(得分:253)
svn revert -R .
svn up
这将递归还原当前目录及其下的所有内容,然后更新到最新版本。
答案 1 :(得分:83)
我结合其他人的答案提出了这个解决方案:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
答案 2 :(得分:19)
svn revert -R .
svn cleanup . --remove-unversioned
答案 3 :(得分:13)
如果你没有任何改变,你可以永远彻底和/或懒惰并且做... ...
rm -rf *
svn update
但是,不是真的,不这样做,除非你非常确定来自nuke-from-space选项是你想要的!!这样做的好处是还可以修复所有构建残缺,临时文件以及SVN忽略的内容。
更正确的解决方案是使用revert命令:
svn revert -R .
-R导致subversion递归并恢复当前工作目录内和下的所有内容。
答案 4 :(得分:9)
这里的答案都不是我想要的。这就是我想出的:
# Recursively revert any locally-changed files
svn revert -R .
# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
tr '\n' '\0' | xargs -0 rm -rf
在Linux上测试;可以在Cygwin中工作,但依赖于(我相信)GNU特定的扩展,它允许xargs基于'\0'
而不是空格进行拆分。
上述命令的优点是它不需要任何网络活动来重置沙箱。您完全得到了以前所拥有的,并且丢失了所有更改。 (在有人责备我这个代码破坏他们的工作之前的免责声明); - )
我在一个持续集成系统上使用这个脚本,我想确保在运行一些测试后执行干净的构建。
编辑:我不确定这适用于所有版本的Subversion。目前尚不清楚svn status
命令是否始终格式化。使用这种毯子rm
命令的任何命令都要自担风险。
答案 5 :(得分:7)
svn revert 将撤消您所做的任何本地更改
答案 6 :(得分:5)
您可以使用以下命令还原所有本地更改:
svn st -q | awk '{print $2;}' | xargs svn revert
答案 7 :(得分:4)
svn status | grep '^M' | sed -e 's/^.//' | xargs rm
svn update
将删除任何已修改的文件。我似乎记得在添加文件和目录时遇到恢复问题。
答案 8 :(得分:1)
答案 9 :(得分:0)
如果您使用的是Windows,则以下for循环将还原对工作区所做的所有未提交的更改:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
如果要删除所有未提交的更改和所有未版本化的对象,则需要2个循环:
for /F "tokens=1,*" %%d in ('svn st') do (
svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
svn rm --force "%%e"
)