2

我有以下问题:我遵循了许多关于通过 svn+ssh 设置公钥访问权限的教程,该访问权限在具有 ssh-only 访问权限的 linux 机器上的 subversion 存储库中。它似乎适用于检出、更新和提交,但如果有人尝试合并或使用 ^ 运算符进行复制,它就会崩溃。

让我以示例的形式提供更多信息:svn 存储库位于机器 mymachine.myhost.com 的文件夹 /home/bob/svn/project 中,属于用户 bob(又名:me)。我为 alice 生成了一个密钥,并将以下行添加到 /home/bob/.ssh/authorized_keys:

command="/usr/bin/svnserve -t -r /home/bob/svn/project --tunnel-user=Alice",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa <alices key> alice

Alice 能够使用

svn co svn+ssh://bob@mymachine.myhost.com@

她可以提交更改和更新。但是,如果她尝试在她的机器上使用 ^ 运算符合并或执行 svn cp,如下所示:

svn cp ^/trunk/ branches/alicesbranch

服务器没有反应,过了一会儿她收到以下消息

svn: E210002: Unable to connect to a repository at URL 'svn+ssh://bob@mymachine.myhost.com/trunk/'
svn: E210002: To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file.
svn: E210002: Network connection closed unexpectedly

经过一番研究,我放弃了,因为在大多数情况下,我只会从根本无法访问存储库的人那里得到讨论。但是在我的情况下,I/Alice确实可以访问,但不像某些 svn 操作似乎需要的那样通用。

我相信我在 svnserve 命令和 Alice 用来结帐的路径的组合上做错了,但我不知道是什么。

实际上,服务器是我没有 root 访问权限的机器。此外,网络似乎对外部访问非常屏蔽:只允许 ssh,但是一旦发生上述错误,I/Alice 就暂时无法在所述主机名上登录,可能是因为防火墙拒绝访问由于 ssh 连接失败,出于安全原因。这也是为什么我不能继续使用不同的 svnserve 命令和不同的 checkout 命令进行大量试验和错误,因为每个错误都会迫使我等到我可以进行另一次试验。

这就是为什么我希望这里有人可以帮助我。我希望我提供了足够的信息来确定问题。

真诚的, 达施姆

编辑1:这是爱丽丝会得到的svn信息

Path: .
Working Copy Root Path: /home/alice/mysvnprojects/myprojectwithbob
URL: svn+ssh://bob@mymachine.myhost.com
Relative URL: ^/
Repository Root: svn+ssh://bob@mymachine.myhost.com
Repository UUID: 8f8511ce-d5fa-11e3-abfa-cd5eac3f4aa8
Revision: 121
Node Kind: directory
Schedule: normal
Last Changed Author: Alice
Last Changed Rev: 121
Last Changed Date: 2014-08-22 15:36:56 +0200 (Fri, 22 Aug 2014)

编辑 2: 将 svnserve 命令更改为

command="/usr/bin/svnserve -t -r /home/bob/svn/ --tunnel-user=Alice"

并相应地更改 co 命令并不能解决问题。这是输出:

/home/alice/mysvnprojects/myprojectwithbob: svn co svn+ssh://bob@mymachine.myhost.co/project
  [looong list of files]
  Checked out revision 129.
/home/alice/mysvnprojects/myprojectwithbob: ls
  project
/home/alice/mysvnprojects/myprojectwithbob: cd project/
/home/alice/mysvnprojects/myprojectwithbob: svn info
  Path: .
  Working Copy Root Path: /home/alice/mysvnprojects/myprojectwithbob
  URL: svn+ssh://bob@mymachine.myhost.com/project
  Relative URL: ^/
  Repository Root: svn+ssh://bob@mymachine.myhost.com/project
  Repository UUID: 8f8511ce-d5fa-11e3-abfa-cd5eac3f4aa8
  Revision: 129
  Node Kind: directory
  Schedule: normal
  Last Changed Author: Alice
  Last Changed Rev: 129
  Last Changed Date: 2014-09-02 12:33:56 +0200 (Tue, 02 Sep 2014)
/home/alice/mysvnprojects/myprojectwithbob: ls
  branches  trunk
/home/alice/mysvnprojects/myprojectwithbob: svn cp ^/trunk branches/mytestbranch
  svn: E210002: Unable to connect to a repository at URL     'svn+ssh://bob@mymachine.myhost.com/project/trunk'
  svn: E210002: To better debug SSH connection problems, remove the -q option from     'ssh' in the [tunnels] section of your Subversion configuration file.
  svn: E210002: Network connection closed unexpectedly

如果我做

svn cp ^/trunk ^/branches/mytestbranch

相反,它似乎有效!但是,我仍然无法合并

cd trunk 
svn merge ^/branches/mytestbranch .

导致已知错误。

编辑3:

似乎一切都失败了,试图访问根目录之外的任何东西。例如:

svn co svn+ssh://bob@mymachine.myhost.com@

有效,但是[假设使用“svnserve -r /home/bob/svn/project”的基本设置]

svn co svn+ssh://bob@mymachine.myhost.com/trunk

失败。这似乎是所有失败和工作案例的共同点。

4

1 回答 1

0

首先,您需要创建 svn 结构,通过在项目的根目录中创建目录树干、分支和标签并提交此更改。否则服务器上显然没有主干和分支,^/trunk并且^/branches/branch命令失败。

问题是,您正在检查整个存储库而不是主干。您应该在主干或分支上工作并用于svn switch在它们之间切换。要使其正常工作,请尝试使用以下命令签出项目:

svn co svn+ssh://bob@mymachine.myhost.co/project/trunk

如果您现在尝试合并它应该可以工作。问题是,您正在尝试将整个存储库与分支合并,该分支实际上是该存储库的子文件夹。所以要切换到 Alice 分支,请使用:

svn switch ^/branches/mytestbranch

如果要将其合并回主干,请先使用

svn switch ^/trunk

然后做一个

svn merge ^/branches/mytestbranch

查看如何使用 svn 以及哪些工作流是最佳实践的教程。

于 2014-09-02T09:24:20.197 回答