我有一个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
消息失败。我在本地和远程使用相同的用户。
我应该在哪里查找日志/调试信息来解决此问题?
答案 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
答案 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添加了一个符号链接,它又开始工作了。