【问题标题】:Cloning GIT repository by ANTANT 克隆 GIT 存储库
【发布时间】:2013-07-14 10:05:20
【问题描述】:

我正在借助 ANT 进行 GIT 克隆。我正在使用以下代码:

<target name ="deploy">

 <sshexec host="ssh://user@rep_location/project_name.git"
    username="username"
    password=""
    passphrase="passphrase"
    trust="true"
    command="git clone ssh://user@rep_location/project_name.git  D:/dest"/
    />

</target>

位置“D:/dest”是我希望克隆存储库的必需文件夹。但它会抛出unknown host exception 的错误。

我尝试了一些与主机的组合,例如ssh://user@rep_location,但它也会返回服务器连接超时。
我们要求在结帐时提供密码。 此命令适用于 GIT BASH

【问题讨论】:

    标签: git ant github


    【解决方案1】:

    这应该链接到这个“未知主机密钥”经典 ssh 错误:请参阅“com.jcraft.jsch.JSchException: UnknownHostKey”。

    最简单的解决方案还是先手动执行 ssh:

    尝试从命令行 ssh 并接受公钥(主机将添加到~/.ssh/known_hosts

    确保在 Windows 上定义了 HOME 环境变量,JSch used by the sshexec ant task 将能够在其中找到 %HOME%\.ssh\known_hosts 文件。
    这与始终定义 $HOME 的类 unix git bash 会话不同。

    【讨论】:

    • 您好 VonC,我稍微纠正了我的代码。主机不对。这次我只是通过“存储库位置”代替“ssh://user@rep_location/project_name.git”。通过这样做,它能够连接到存储库......但仍然抛出此错误“SSH_MSG_DISCONNECT:2 用户名身份验证失败太多”。我传递了正确的凭据。错误仍然存​​在。
    • @Narendra 和 ssh -Tvvv user@rep_location 返回什么?
    • 它要求输入密码。我输入了,但它显示身份验证失败。它向 git 存储库发送了一个密码包,但它返回“权限被拒绝,请重试”。经过三次尝试,它失败了。
    • 我确信我传递了正确的凭据,因为我可以通过 GIT BASH 做到这一点。
    • 我在我的环境变量中指定了 GIT_HOME 变量并提供了它的安装文件夹,后来将它添加到路径变量中。我不确定,作为地址传递 HOME 变量中的地址是什么,你在你的第一条评论中建议了我
    【解决方案2】:

    以下错误表示 ANT 无法解析主机名:

    未知主机异常

    您正在提供一个 git URL 作为主机参数的值:

     <sshexec host="hostwhereIwanttoclonerepository.com"
        username="username"
        passphrase="passphrase"
        trust="true"
        command="git clone ssh://user@rep_location/project_name.git  D:/dest"/
        />
    

    请记住,您是在远程计算机上运行 git 命令,“用户名”帐户将需要有效的 SSH 凭据才能访问 git 存储库主机。

    最后,我怀疑您正在尝试在本地克隆存储库?在这种情况下,您不应该使用 sshexec 任务。我建议尝试jGit 的“git-clone”ANT 任务。举个例子:

    您可能还需要包含 jsch jar 才能访问 SSH Git URL。

    【讨论】:

    • 你好,马克,我读了你的帖子。我需要在从 git 存储库中签出时传递密码。我没有得到正确的字段来传递它。简单地运行代码返回“USERAUTH 失败”异常.
    【解决方案3】:
    <exec executable="${gitBinPath}">
        <arg value="clone" />
        <arg value="--depth" />
        <arg value="1" /> 
        <arg value="${gitRepositoryURL}" />
        <arg value="${deployDir}" />
    </exec>
    
    • gitBinPath: git.exe 的位置
    • gitRepositoryURL:Git 存储库 URL
    • deployDir:目标文件夹

    【讨论】: