Svn存储库停止使用svn + ssh(但在服务器上本地工作)

时间:2011-03-14 11:58:55

标签: svn ssh svn-externals

我有一个svn存储库,我曾经用svn + ssh协议签出。它有一些EXTERNALS,用svn + ssh URL引用自己。

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

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

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

4 个答案:

答案 0 :(得分:2)

感谢您介绍我。我使用strace来调试命令的原因:

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

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

Host HOSTNAME

在〜/ .subversion / config的[tunnels]部分使用strace。我改变了这个:

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”作为“hostname”传递给ssh命令。快速解决方法是在〜/ .ssh / config:

中更改此行

Host HOSTNAME

到此:

Host HOSTNAME hostname

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

答案 1 :(得分:1)

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

svn propedit svn:externals path/to/dir

请参阅: http://svnbook.red-bean.com/en/1.0/ch07s03.html

答案 2 :(得分:1)

我找到了自己的方式。我在这里写它以供将来参考。

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

长话短说:即使我使用了网址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 :(得分:0)

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