Subversion 中的状态“S”

问题描述 投票:0回答:15

在某些时候,我的工作副本中的所有文件都被标记为“S”符号,如下所示:

$ svn st
M    S   AclController.php
     S   InstallationController.php
     S   CustomerController.php
     S   RedirController.php
     S   IndexController.php
     S   LoginController.php
     S   OrderController.php
     S   ProductController.php
     S   SelfInstallController.php
     S   SelfcareController.php

有趣的是,它只发生在这个特定的工作副本中 - 当我将项目签出到新目录时,它不会显示“S”标记。

如何摆脱这个烦人的“S”符号?它显着降低了 WC 状态的清晰度。

更新:我确实会不时使用标准的

svn switch
语法进行切换。直到最近,它才导致这个“S”符号出现。用于切换的命令是:

svn switch svn+ssh://xxxxxx/subversion/xxxxxxx/releases/1.0.16 .

有什么办法可以清除“S”标志吗?

svn switch-statement status
15个回答
80
投票

这意味着这些文件来自 Subversion 存储库中与包含它们的目录不同的位置。解决方案是将整个工作副本切换到同一位置。有关如何调用该命令的详细信息,请参阅 subversion 书中的 two sections


12
投票

如果您对目录本身和其中的(其中一个)文件调用“svn info”,您将获得两个不同的 URL。

如果文件/目录的 URL 与父级 URL 后跟文件名不匹配,您将获得“S”状态。

您可以发布父节点和子节点之一的 url 吗? (在适当的情况下匿名化 URL)


10
投票

我从主干 (r100) 切换到某个分支 (r50) 时处于“S”状态。我收到错误:

svn: Failed to add file 'web/.htaccess': an unversioned file of the same name already exists

所有 web/ 的子目录都被标记为“S”。

原因:我删除了 .htaccess 到 svn:忽略它(r100),然后再次创建它(未版本化并忽略)。分支 (r50) 的仓库中仍然有 web/.htaccess。

解决方案:

mv web/.htaccess ../../
svn switch back to trunk
svn switch to branch again

一切都很好。


6
投票

我成功提交到 SVN 的目录遇到了这个问题。我的解决方案是在本地删除它然后更新。我看不到任何差异,但 .svn 文件由于某种原因已被修复(不再有 S)。


5
投票

如果有人迟到寻找答案(上面已经正确说明),我相信这种情况的可能原因是父目录上的“svn switch”失败(就像本地未提交文件的情况一样)具有相同的名称,并且没有 --force 选项),使失败后的所有文件“未切换”。

这就是为什么(假设最初的问题后来得到纠正)在同一父目录上再次进行后续的“svn switch”确实会将剩余的未切换文件切换到新的存储库路径。


5
投票

这通常是由于切换分支时中断造成的。

切换到不同的分支,然后再切换回你真正想要的分支。

svn switch some_other_branch_url

svn switch desired_branch_url


4
投票

仅供参考:当我从存储库中的同一位置但使用不同的 URL 检出已删除的目录时,我得到了相同的 S 符号,即使用不同的协议进行检出,例如“svn checkout svn+ssh://” [电子邮件受保护]...”针对“svn checkout --username user https://scm.gforge....”。我通过使用第一次结帐时使用的相同 URL 再次检查来解决了这个问题。


3
投票
SVN 书籍

,了解有关如何撤消此操作的详细信息。


3
投票

我将一个外部库解压到我的 SVN 根目录中,结果发现第三方作者不小心将他们自己的 .svn 文件夹包含在他们的文件夹之一中。这当然会覆盖我们自己的正确的 subversion 文件夹,并且与本页其他地方描述的效果相同 - 一个文件夹似乎意外地切换到了另一个分支。


1
投票
“项目已切换。”

如果您在工作副本上使用了“svn switch”,这可能会解释它?


1
投票

svn status

就是进入标有“S”的目录并删除隐藏的.svn目录:

rm -rf .svn

随后来源会显示并标有“?”您可以轻松地新鲜添加它们:

svn 添加路径/到/资源


0
投票
切换回父级


0
投票
S

的问题。


我使用@ahnbizcad 的答案作为指导。从子目录的父目录(本身位于顶级目录下):

svn sw <branch_url>


svn sw <trunk_url>

    


0
投票


-6
投票

svn st --help

svn st --help | grep S 'S' the item has a Switched URL relative to the parent

© www.soinside.com 2019 - 2024. All rights reserved.