【问题标题】:Svn repository stopped working with svn+ssh (but works locally on the server)svn 存储库停止与 svn+ssh 一起工作(但在服务器上本地工作)
【发布时间】:2011-07-14 23:16:57
【问题描述】:

我有一个 svn 存储库,用于使用 svn+ssh 协议进行结帐。它有一些用 svn+ssh URL 引用自身的 EXTERNALS。

直到今天我才离开这个项目一段时间。当我尝试访问 svn+ssh url(几个月前曾经工作过)时,我收到消息svn: No repository found in 'svn+ssh://my-correct.hostname.com/the/right/path/to/the/repository。我仔细检查了,路径和主机名都是正确的。

我尝试使用 file:// URL 在托管 repo 的机器上检查它,它成功了,直到它必须检查 EXTERNALS,它在 No repository 消息中失败。我在本地和远程使用相同的用户。

我应该在哪里寻找日志/调试信息来解决这个问题?

【问题讨论】:

    标签: svn ssh svn-externals


    【解决方案1】:

    我不知道在哪里可以找到日志,但我认为您可以使用以下命令删除/更改该目录中的 externals 属性:

    svn propedit svn:externals path/to/dir
    

    见: http://svnbook.red-bean.com/en/1.0/ch07s03.html

    【讨论】:

      【解决方案2】:

      我找到了办法。我把它写在这里以供将来参考。

      编辑:结果是一位同事在没有通知的情况下修改了该文件。然而,找到问题的原因比理想更困难。

      长话短说:即使我使用了 URL svn+ssh://my-correct.hostname.com/the/right/path/to/the/repository,在服务器上查找的真实路径也是 /var/svn/the/right/path/to/the/repository。确实是走错路了。但我认为我为找到这一点所做的步骤可能对其他人有用,因此我将在此处报告。

      首先,我将(在服务器上)/usr/bin/svnserve 移动到 /usr/bin/svnserve.orig 并将我自己的 svnserve 与这些内容放在一起:

      #!/bin/bash
      strace -o /tmp/svntrace /usr/bin/svnserve.orig $@ | tee /tmp/svnserve-out
      

      然后我再次运行结帐,然后服务器上的/tmp/svntrace 的尾部包含我解决问题所需的所有信息。

      似乎在文件/var/svn/svnwrapper.sh 中使用-r 选项设置了一个新的svn 根目录。删除后,一切都像魅力一样。

      我仍然无法理解发生了什么(过去它曾经有效,我几乎可以肯定我没有改变任何东西)。

      【讨论】:

        【解决方案3】:

        感谢您向我介绍 strace。我用 strace 调试了为什么这个命令:

        svn+ssh://HOSTNAME/path/to/svn/directory

        将无法识别 ~/.ssh/config 中的这一行:

        Host HOSTNAME

        要使用 strace,请在 ~/.subversion/config 的 [tunnels] 部分中。我改变了这个:

        ssh = ssh -o ControlMaster=no

        到这里:

        ssh = strace -o tmp ssh -o ControlMaster=no

        然后我运行了这个命令:

        svn list svn+ssh://HOSTNAME/path/to/svn/directory

        查看进入文件“tmp”的 strace 的输出,我可以看到“HOSTNAME”作为“主机名”传递给 ssh 命令。快速修复是在 ~/.ssh/config 中更改此行:

        Host HOSTNAME

        到这里:

        Host HOSTNAME hostname

        无论主机名作为“HOSTNAME”还是“hostname”传递给 ssh,这都会导致应用特定于主机的设置。

        【讨论】:

        • 感谢您使用 strace 的指南 - 从这里我发现 svn+ssh 失败的原因是我需要对我的私钥文件设置更严格的权限为described here
        【解决方案4】:

        strace 帮助隔离了问题。我的存储库位于 /var/svn/repos 但跟踪显示它无法找到 /repos/format。我在 /repos 添加了一个指向 /var/svn/repos 的符号链接,它又开始工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-04
          • 1970-01-01
          • 1970-01-01
          • 2015-07-15
          • 2012-08-16
          • 1970-01-01
          相关资源
          最近更新 更多