如何在svn + ssh url中使用git-svn

时间:2012-07-05 13:56:37

标签: git svn git-svn

我喜欢在cygwin中使用git svn clone命令和我们公司的svn存储库。

此网址为svn+ssh://svn.<url>.com/repo

在此我可以看到,例如使用trunk / tags / branches擦除存储库

正在运行git svn clone svn+ssh://svn.<url>.com/repo

  

没有此类文件或目录:无法连接到URL上的存储库   'svn + ssh://svn..com/repo':子进程出错:'ssh'的exec   失败:/ usr / lib / git-core / git-svn行没有这样的文件或目录   2299

任何人都可以帮助我做什么以及如何做到这一点?

2 个答案:

答案 0 :(得分:0)

对于git-svn svn+ssh工作,您需要确保:

  • 您在同一台计算机上安装了ssh客户端。
  • 您在URI中提供了正确的用户名,例如svn+ssh://foo@svn.bar.com/project 您安排使用ssh密钥和ssh-agent进行身份验证。

答案 1 :(得分:0)

必须同时使用私钥和公钥ssh来设置svn + ssh协议。

如果使用Windows,则必须先设置ssh密钥,然后再运行 svn客户端使用与本地Windows svn.exe相关的这些常规步骤(例如,不应移植为非完全本地的msyscygwin工具):

  1. 安装putty客户端。
  2. 使用puttygen.exe实用工具和正确类型的密钥生成密钥 密钥取决于svn集线器服务器(Ed25519,RSA,DSA等)。
  3. 通过阅读从文档到服务器的步骤,将已生成的密钥的公共变体安装到svn集线器服务器中。
  4. 使用以下内容创建SVN_SSH环境变量:SVN_SSH="<path-to-plink>/plink.exe" -batch -l "<USERNAME>"。这样可以避免由于交互式登录/密码请求而导致脚本挂起,并且可以避免使用用户名位于内部的svn存储库URL。
  5. 确保所有svn工作副本及其中的externals属性都包含带有svn+ssh://前缀的有效svn存储库URL。如果不是,则使用svn relocate https:// svn+ssh://命令切换到该命令。然后,例如,只需删除url方案前缀并保留externals前缀,即可修复//属性中的所有其余url。
  6. 使用先前生成的私钥在后台运行pageant.exe(添加它)。
  7. 通过putty.exe客户端测试与svn集线器服务器的连接。如果pageant.exe已启动并以正确的私钥运行,则客户端不应要求输入密码。如果用用户名声明了SVN_SSH环境变量,则客户端也不应要求用户名。

git客户端基本上是已移植的msyscygwin工具的一部分,这意味着它们的行为有所不同。

消息Can't create session: Unable to connect to a repository at URL 'svn+ssh://...': Error in child process: exec of '' failed: No such file or directory at .../Git/mingw64/share/perl5/Git/SVN.pm line 310.的问题之一是SVN_SSH环境变量的问题。应该使用与git本身相同的工具中的实用程序来定义变量。尝试与plink.exe应用程序中的独立putty一起使用它时,将以该消息结束。

因此,除了svn.exe应用程序的步骤之外,您还应该应用以下步骤:

  1. 删除SVN_SSH环境变量的使用并将其删除。
  2. ssh-pageantmsys工具运行cygwinputty的{​​{1}}必须已经使用有效的私钥运行了)。例如,您可以从这里阅读有关内容:https://github.com/cuviper/ssh-pageant
ssh-pageant是Windows的微型工具,允许您在Cygwin和MSYS Shell环境中使用PuTTY的Pageant中的SSH密钥。
  1. 从标准输出中创建pageant返回的环境变量,例如:ssh-pageant
  2. 根据文档(https://git-scm.com/docs/git-svn#Documentation/git-svn.txt---usernameltusergt)中的说明,在SSH_AUTH_SOCK=/tmp/ssh-hNnaPz/agent.2024命令中使用URL和用户名:git svn ...
--username = <用户> 对于SVN处理(http,https和svn)身份验证的传输,请指定用户名。对于其他传输方式(例如svn + ssh://),您必须在URL中包含用户名,例如svn + ssh://foo@svn.bar.com/project

这些说明应有助于将svn+ssh://<USERNAME>@svn.<url>.com/repo命令与git svn命令一起使用。