我有以下问题:我跟随了许多教程,可以找到关于设置通过svn + ssh公共密钥访问到一个Subversion存储库在只有ssh的访问的Linux机器上。它似乎适用于结帐,更新和提交,但如果有人试图合并或使用^运算符进行复制,则会崩溃。svn + ssh与公共密钥在Linux上:合并失败,但合作,提交,承诺作品
让我以示例的形式提供更多信息:svn存储库位于机器mymachine.myhost.com的文件夹/ home/bob/svn/project中,属于用户bob(aka:me)。我产生了爱丽丝的关键,并添加以下行/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
爱丽丝能够检出使用
svn co svn+ssh://[email protected]@
她可以提交修改和更新资源库。但是,如果她试图合并或使用她的机器上^操作如下运行svn CP:
svn cp ^/trunk/ branches/alicesbranch
TE服务器没有反应,过了一段时间,她得到了以下消息
svn: E210002: Unable to connect to a repository at URL 'svn+ssh://[email protected]/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操作通用似乎需要。
我相信我对svnserve命令和Alice用于签出的路径的组合做了错误的处理,但我不知道是什么。
实际上,服务器是我没有root权限的机器。此外,网络似乎被屏蔽了外部访问:只允许ssh,但只要发生上述错误,I/Alice就根本无法在所述主机名上登录一段时间,可能是因为防火墙拒绝访问由于ssh连接失败,出于安全原因而暂时关闭。这也是为什么我不能继续前进,用不同的svnserve命令和不同的结账命令进行大量的试验和错误,因为每个错误都会迫使我等待,直到我可以再次尝试。
这就是为什么我希望这里有人能帮助我。我希望我提供了足够的信息来解决这个问题。
诚恳, Daschm
编辑1:下面是SVN信息爱丽丝会得到
Path: .
Working Copy Root Path: /home/alice/mysvnprojects/myprojectwithbob
URL: svn+ssh://[email protected]
Relative URL: ^/
Repository Root: svn+ssh://[email protected]
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://[email protected]/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://[email protected]/project
Relative URL: ^/
Repository Root: svn+ssh://[email protected]/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://[email protected]/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://[email protected]@
作品,但[假设基本设置在使用 “svnserve的-r /首页/鲍勃/ SVN /项目”]
svn co svn+ssh://[email protected]/trunk
失败。这似乎是所有失败和工作案例的共同点。
所以你正在合并这台机器上的分支?并得到一个错误? 为什么不检查存储库并将它们合并到另一台机器上,然后检查服务器上的副本以获取我生产的产品? 另一种选择是你可以运行一个bash脚本来运行$ svn merge ^/trunk branches/alicesbranch,你可能想要给它完整的路径。 – 2014-09-02 09:11:09
不,每个其他用户(如爱丽丝)都使用自己的计算机与存储库一起工作,并且如果他们必须合并,他们将自行合并。还有一个问题:他们不能,因为只要有人试图在他们的计算机上合并,他们就无法再连接到存储库。相同的cp ^东西。 – Daschm 2014-09-02 09:13:42
你可以发布'svn info'的输出吗? – evotion 2014-09-02 09:14:28