在某些时候,我的工作副本中的所有文件都被标记为“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 info”,您将获得两个不同的 URL。
如果文件/目录的 URL 与父级 URL 后跟文件名不匹配,您将获得“S”状态。
您可以发布父节点和子节点之一的 url 吗? (在适当的情况下匿名化 URL)
我从主干 (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
一切都很好。
我成功提交到 SVN 的目录遇到了这个问题。我的解决方案是在本地删除它然后更新。我看不到任何差异,但 .svn 文件由于某种原因已被修复(不再有 S)。
如果有人迟到寻找答案(上面已经正确说明),我相信这种情况的可能原因是父目录上的“svn switch”失败(就像本地未提交文件的情况一样)具有相同的名称,并且没有 --force 选项),使失败后的所有文件“未切换”。
这就是为什么(假设最初的问题后来得到纠正)在同一父目录上再次进行后续的“svn switch”确实会将剩余的未切换文件切换到新的存储库路径。
这通常是由于切换分支时中断造成的。
切换到不同的分支,然后再切换回你真正想要的分支。
svn switch some_other_branch_url
svn switch desired_branch_url
仅供参考:当我从存储库中的同一位置但使用不同的 URL 检出已删除的目录时,我得到了相同的 S 符号,即使用不同的协议进行检出,例如“svn checkout svn+ssh://” [电子邮件受保护]...”针对“svn checkout --username user https://scm.gforge....”。我通过使用第一次结帐时使用的相同 URL 再次检查来解决了这个问题。
我将一个外部库解压到我的 SVN 根目录中,结果发现第三方作者不小心将他们自己的 .svn 文件夹包含在他们的文件夹之一中。这当然会覆盖我们自己的正确的 subversion 文件夹,并且与本页其他地方描述的效果相同 - 一个文件夹似乎意外地切换到了另一个分支。
svn status
就是进入标有“S”的目录并删除隐藏的.svn目录:
rm -rf .svn
随后来源会显示并标有“?”您可以轻松地新鲜添加它们:
svn 添加路径/到/资源
S
的问题。
我使用@ahnbizcad 的答案作为指导。从子目录的父目录(本身位于顶级目录下):
svn sw <branch_url>
svn sw <trunk_url>
svn st --help
或
svn st --help | grep S
'S' the item has a Switched URL relative to the parent