81

在某些时候,我的工作副本中的所有文件都标有“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”标志吗?

4

14 回答 14

79

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

于 2009-12-08T12:29:40.927 回答
11

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

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

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

于 2009-12-09T13:04:10.797 回答
8

从主干 (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) 在 repo 中仍然有 web/.htaccess。

解决方案 :

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

一切安好。

于 2011-09-22T17:11:52.173 回答
6

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

于 2010-01-06T00:17:00.433 回答
5

这通常是由切换分支时的中断引起的。

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

svn switch some_other_branch_url

svn switch desired_branch_url

于 2016-06-01T22:16:41.360 回答
4

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

这就是为什么(假设原来的问题后来得到纠正)在同一个父目录上的后续 'svn switch' 确实会将剩余的未切换文件切换到新的 repo 路径。

于 2012-07-06T19:20:44.590 回答
4

只是备注:当我从存储库中的同一位置签出已删除的目录但使用不同的 URL时,我得到了相同的 S 符号,即使用不同的协议来签出,例如 'svn checkout svn+ssh://user@scm .gforge...' 反对 'svn checkout --username user https://scm.gforge ....'。我通过使用第一次结帐时使用的相同 URL 再次检查它来解决它。

于 2011-01-13T16:00:19.057 回答
3

还有另一种方法可以实现这种状态——希望这可以节省一些时间来追踪它。

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

于 2012-08-02T10:00:58.160 回答
3

这意味着您已从一个工作副本切换到另一个工作副本,例如您已签出一个工作副本,然后将其交换以与代码分支进行比较。查看SVN 书籍,了解如何撤消此操作的详细信息。

于 2009-12-08T12:13:21.290 回答
1

“物品换了。”

如果你在你的工作副本上使用了“svn switch”,那可能会解释它吗?

于 2009-12-08T12:02:31.173 回答
1

发行时摆脱“ S”的简单解决方案

svn status

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

rm -rf .svn

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

svn 添加路径/到/资源

于 2018-01-30T00:31:11.547 回答
0

在我的情况下,分支中的两个子目录在主干中被删除。我从顶级目录的主干切换分支,然后移回主干并遇到这些子目录现在处于状态的问题S

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

svn sw <branch_url>

svn sw <trunk_url>

于 2018-11-30T13:01:10.533 回答
0

对我来说,当“svn switch”命令被中断并使用 TortoriseSVN 解决它时会发生这种情况,我右键单击文件并选择switch back to parent

于 2015-08-22T05:38:04.560 回答
-6

我建议你阅读它的官方帮助,试试:

svn st --help

或者

svn st --help | grep S

'S' the item has a Switched URL relative to the parent
于 2013-01-21T02:03:00.280 回答