2014-09-02 24 views
2

我有以下问题:我跟随了许多教程,可以找到关于设置通过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 

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

+0

所以你正在合并这台机器上的分支?并得到一个错误? 为什么不检查存储库并将它们合并到另一台机器上,然后检查服务器上的副本以获取我生产的产品? 另一种选择是你可以运行一个bash脚本来运行$ svn merge ^/trunk branches/alicesbranch,你可能想要给它完整的路径。 – 2014-09-02 09:11:09

+0

不,每个其他用户(如爱丽丝)都使用自己的计算机与存储库一起工作,并且如果他们必须合并,他们将自行合并。还有一个问题:他们不能,因为只要有人试图在他们的计算机上合并,他们就无法再连接到存储库。相同的cp ^东西。 – Daschm 2014-09-02 09:13:42

+0

你可以发布'svn info'的输出吗? – evotion 2014-09-02 09:14:28

回答

0

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

问题是,您正在检出整个存储库而不是主干。您应该在干线或分支上工作,并使用svn switch在它们之间切换。要得到它的工作,尝试用此命令检出项目:

svn co svn+ssh://[email protected]/project/trunk 

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

svn switch ^/branches/mytestbranch 

如果你想不想把它合并到主干,首先使用

svn switch ^/trunk 

,然后做一个

svn merge ^/branches/mytestbranch 
切换回它

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

+0

如果您阅读我的主帖,您会看到我为爱丽丝定义了关键。如果我没有,她根本无法连接到存储库。编辑刚刚取代了svnserve部分。 – Daschm 2014-09-02 12:42:15

+0

好的,对不起,我必须重读它。但是你检查了权限吗? – evotion 2014-09-02 12:43:47

+0

@Daschm检查新的答案。我认为这应该是解决方案。 – evotion 2014-09-02 12:56:20