Subversion中的状态“ S”


80

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


7
根据,状态S表示“已切换” svn h st。但是,这意味着什么……
me_and

1
@me_and:切换工作副本:svnbook.red-bean.com/en/1.0/ch04s05.html
Chris J

1
仅作记录-因为这是我在网上找到的最接近的问题-我们在尝试将分支合并到主干时遇到了S标志问题。这与我们使用外部组件有关。它们在分支上已删除,但主干一直引用它们,因此无法合并。解决方案是删除我们在主干分支中删除的外部组件,提交主干并再次重新集成。希望对大家有帮助:)干杯!
达里奥·哈维尔·克拉韦罗(DaríoJavier Cravero)2012年

Answers:


76

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


35
我已经看到,当“ svn switch”命令由于某种冲突而中断时,也会发生这种情况,例如,您要切换为拥有未提交的本地文件的存储库版本的分支。跳出svn进行修复,从而使整个工作副本无法完全切换。解决此问题,然后重新执行switch命令对我有用。
Michael H.

4
我遇到以下错误-E210002:网络连接意外关闭。重新执行switch命令似乎可以解决问题,并且“ S”状态消失了。
凯文·萨德勒

1
SVN切换期间的中断IS导致了这一点。意识到。
SandorRacz

2
凯文·萨德勒(Kevin Sadler)实际上提供了解决方案,而不仅仅是描述了问题。+1
ahnbizcad

11

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

如果文件/目录的URL与父文件的URL不匹配,后跟文件名,则显示“ S”状态。

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


尽管不是答案,但是这个“答案”对于提供一些正在发生的事情非常有用。
FlipMcF

这不是答案。
ahnbizcad '16

8

从中继(r100)切换到某个分支(r50)时,我处于' S '状态。我得到了错误:

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

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

原因:我已删除对svn的.htaccess文件:忽略它(r100),然后再次创建了它(未版本化和忽略)。分支(r50)在回购中仍然具有web / .htaccess。

解决方案 :

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

一切安好。


我有类似的错误,但是我删除了令人讨厌的“ web / .htaccess”版本(因为对我来说是几个目录),并进行了svn更新,然后从中继切换到特定标签,再切换回中继(特定标签实际上是行李箱的副本...),然后飘忽的“ S”标志消失了。
卡萨波2012年

6

我成功提交到SVN的目录存在此问题。我的解决方案是在本地擦除它,然后更新。我看不到任何差异,但是无论什么原因(没有更多的S),. svn文件都是固定的。


更新到较新的分支后,我在svn外部发生了这种情况。手动删除整个外部,然后运行svn update可以修复它。+1!
Stephen Fuhry 2011年

5

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

切换到另一个分支,然后再切换回您真正想要的分支。

svn switch some_other_branch_url

svn switch desired_branch_url


4

只是一句话:当我从存储库中的同一位置检出已删除的目录但使用不同的URL时,我得到了相同的S符号,即,使用不同的协议进行检出,例如'svn checkout svn + ssh:// user @ scm .gforge ...”针对“ svn结帐--username用户https://scm.gforge ....”。我通过使用与第一次签出相同的URL再次签出解决了该问题。


使用相同的URI重新结帐解决了该问题。谢谢。
sepehr 2014年

4

万一有人迟来寻找答案(上面已正确说明),我相信这种情况的可能原因是父目录上的“ svn switch”失败(例如,本地未提交的文件带有名称相同,并且没有--force选项),将所有文件在失败后“取消切换”。

这就是为什么(假设稍后会更正原始问题)再次在同一父目录上进行后续的“ svn切换”确实会将其余未切换的文件切换到新的回购路径。


3

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


1
请注意,该链接指向SVN书的过时版本。在这里尝试:svnbook.red-bean.com/en/1.5
Andrew Aylett

好地方。Google再次使我失望。
me_and

3

还有另一种方法可以实现此状态-希望这可以节省一些跟踪它的时间。

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


1
是的,我刚刚有这个。我已将图标目录从一个项目复制到另一个项目,而没有删除.svn目录。导出干净的目录以使用,或者在复制后浏览并删除.svn目录,这是可以svn add预见的。
Eric

1

“项目已切换。”

如果您在工作副本上使用了“ svn开关”,也许可以解释一下?


我一直在尝试使用switch命令,但是我从未获得过'S'的状态。您切换了吗?您是否以某些非主流方式进行了
切换


0

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

svn status

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

rm -rf .svn

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

SVN添加路径/到/资源


在我的情况下,“ S”出现在我从同一服务器上的另一个存储库添加的资源旁边,因此上述解决方案显而易见。
Torsten Barthel,

0

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

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

svn sw <branch_url>

svn sw <trunk_url>


-6

我建议您阅读其官方帮助,请尝试:

svn st --help

要么

svn st --help | grep S

'S' the item has a Switched URL relative to the parent

4
RTFM不能回答有关如何摆脱这种状态的问题。
Madoc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.