如果我这样做:
svn co svn+ssh://svn@10.210.1.24/cidb/V1/trunk/config cidb_config_pipenv
它有效,但如果我这样做:
pip install -e svn+ssh://svn@10.210.1.24/cidb/V1/trunk/config#egg=cidb_config_pipenv
Obtaining cidb_config_pipenv from svn+ssh://svn@10.210.1.24/cidb/V1/trunk/config#egg=cidb_config_pipenv
它删除了' svn @' :
Checking out svn+ssh://10.210.1.24/cidb/V1/trunk/config to /root/.virtualenvs/root-PB1MQnVC/src/cidb-config-pipenv
所以它试图用另一个用户登录svn服务器而不是' svn'它失败了。
在pip文档中,我看到可以使用svn + ssh但是没有例子:我是否有正确的语法来指定用于登录svn服务器的用户?
编辑:我找到的唯一解决方案是在〜/ .subversion / config中强制SSH隧道定义中的用户名:
[tunnels]
ssh = ssh -l svn
这真的很丑,但确实有效。
答案 0 :(得分:2)
当进入详细模式时,可以看到pip正在使用--username调用svn checkout。但那是SVN,它不是工作。
svn checkout --username myuser svn+ssh://host/path
不起作用(至少在ubuntu和centos上):帐户中没有使用用户名。 SVN只接受:
svn checkout svn+ssh://myuser@host/path
我发现黑客攻击:使用'%40'而不是'@',因此pip不会检测网址中的用户名,也不会使用--username选项调用svn。 所以我现在可以做到:
pip -e svn+ssh://myuser%40host/path#egg=myproject
这很难看,可能是我要为pip和/或svn打开一个问题......
答案 1 :(得分:1)
svn+ssh
使用不同的(ssh) authentication,因此正常的--username
身份验证无效。为避免pip
将--username
传递给svn
,您必须避免在网址中svn@
。要传递正确的ssh密钥,您必须重新定义ssh命令。类似的东西(提供真实密钥的路径):
SVN_SSH="ssh -i $HOME/.ssh/id_dsa.svn"
在你的情况下可能是
SVN_SSH="ssh -l svn"
export SVN_SSH
验证它是否有效:
svn co svn+ssh://10.210.1.24/cidb/V1/trunk/config cidb_config_pipenv
运行pip:
pip install -e svn+ssh://10.210.1.24/cidb/V1/trunk/config#egg=cidb_config_pipenv