如何在子目录中撤消“svn switch”?

时间:2008-09-19 09:49:31

标签: svn

不是第一次,我不小心从项目根目录下的某处做了“svn switch”。这只会切换该子目录,但是如何撤消它呢?

如果我尝试将子目录切换回原始分支,我得到:

"svn: Directory 'subdir\_svn' containing working copy admin area is missing"

更新:我在子目录中有变化,所以我不想删除。

在短期内我通过重新应用更改修复了它,但是我想要让Subversion重新切换回我来自的地方......或者这是一个缺少的功能?

7 个答案:

答案 0 :(得分:7)

快速入侵:删除目录,升级一级,然后运行svn update。

答案 1 :(得分:5)

如果不确切知道切换的方式以及目录和存储库布局的方式,很难说出你的情况出了什么问题。

无法真正“恢复”开关。通常,svn开关可以通过开关撤回到原始位置,即当原始位置在svn:// url / to / orig / dir时,则以下内容应该有效:

将子目录切换到存储库的其他部分

svn switch svn://path/to/switched/dir/ subdir

...然后再将其切换回来

svn switch svn://url/to/orig/dir subdir

在您的情况下,听起来好像您试图切换不属于工作副本的目录。

答案 2 :(得分:1)

我通过检查已切换目录中的更改,删除.svn文件和放错位置的文件,然后使用svn checkout <rootUrl>后跟svn update -r HEAD --force来解决此问题。

我认为没有一种干净的方法可以做到。

答案 3 :(得分:0)

如果最新的更改只是切换,那么

右键单击公共父目录,tortoise svn-&gt; 转到svn日志。右键单击SVN Switch之前的版本,然后选择Revert to this revision。

答案 4 :(得分:0)

似乎可以将另一个交换机运行回到您实际所在目录的正确路径。也就是说,如果您运行:

svn switch file:///srv/svn/someproject/branch/27

当你在someproject / subdir中时,然后运行

svn switch file:///srv/svn/someproject/branch/26/subdir

然后从正确的位置运行原始开关。

这似乎恢复了秩序。

答案 5 :(得分:0)

我的用例看起来很简单;我想切换回目录,其当前目录名称以父目录的URL为根。当然,这里的麻烦是获取然后复制父目录的URL。 Windows批处理中的这个脚本对我有用。 Bash用户可以更轻松地做到这一点,但要旨就在这里。直接折叠成SVN似乎很简单……

您可能需要在参数周围添加引号以进行切换,但我将留给您使用。如果不太明显,则需要在要“取消切换”的目录中运行此命令。尽管此时您不愿多加参数(尽管cd \d %1不为空,只是%1在顶部),但它目前并不需要参数或任何东西。

svn-unswitch.bat

@echo off
setlocal

for /f "tokens=*" %%u in ('svn info --show-item url ..') do set "PARENT_URL=%%u"
call :SetDirName %CD%
svn switch %PARENT_URL%/%DIRNAME%
goto :eof

:SetDirName
    set DIRNAME=%~nx1
    goto :eof

已认证:在我的机器上工作!

答案 6 :(得分:-2)

svn revert <dir>

或者,是的,删除它并抓取另一份副本。