获取Visual Studio 2017以使用git的ssh-agent / ssh-add

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取Visual Studio 2017以使用git的ssh-agent / ssh-add相关的知识,希望对你有一定的参考价值。

每当我在Visual Studio中“同步”(拉,推)我的存储库时,我会注意到git-askpass.exe窗口弹出并询问我的git存储库的ssh私钥密码。那很好,但我想知道是否有办法让它与ssh-agent.exe合作。

当我开始我的git bash解释器时,我总是也开始自己的ssh-agent.exe(它在Program Files/git而不是Visual Studio的Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/Git/mingw32/libexec/git-core)和ssh-add.exe我的私钥,所以它要求我一次用密码然后停止打扰我。从Visual Studio我总是必须在“同步”项目时重新输入私钥的密码。有没有办法让这个流畅?

我想删除整个Visual Studio文件夹并创建一个指向Git for Windows文件夹的硬链接...

还有Connect to Git repository with SSH using Visual Studio 2017,它不觉得它涵盖了我的情况。

答案

好吧,我想我想出了这个。

Visual Studio 2017从C:Program Files (x86)Microsoft Visual Studio2017ProfessionalCommon7IDECommonExtensionsMicrosoftTeamFoundationTeam ExplorerGitcmd启动git,git.exe从那里尝试自己的auth方法,直到一个工作。

我在我的问题中关心的auth方法处理已经运行的ssh-agent进程。启动它后,ssh-agent检测到它的环境并“方便地”建议设置哪些“标准”env变量,例如:

SSH_AUTH_SOCK=/tmp/ssh-iTGtZyR9tAxO/agent.12088; export SSH_AUTH_SOCK;
SSH_AGENT_PID=972; export SSH_AGENT_PID;
#echo Agent pid 972;

请注意,路径在“MINGW-speak”中,解析为%LOCALAPPDATA%Temp等路径。它实际上是好的,甚至在git bash之外引用这样的路径(git.exessh-agent.exe将能够解决它们)。

所以我有2个脚本,一个加载我的私钥,这是我第一次打开.bashrc时由我的git bash启动的:

10_ssh.sh

#!/usr/bin/env bash

SSH_ENV=$HOME/.ssh/environment

function start_agent {
    echo "Initialising new SSH agent..."

    # run it with eval so that it sticks after terminal completion
    eval "/usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}"

    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null

    /usr/bin/ssh-add;
}

# Source SSH settings, if applicable

if [ -f "${SSH_ENV}" ]; then
    . ${SSH_ENV} > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

和我刚刚创建的一个新的,也将“Windows”这些变量放入:

15_ssh_windows_hacks.sh

#!/usr/bin/env bash

# This one makes sure that the Windows environment recognizes the ssh agent started before

if [[ `uname` == MINGW* ]]
then
    setx SSH_AUTH_SOCK $SSH_AUTH_SOCK > /dev/null
    setx SSH_AGENT_PID $SSH_AGENT_PID > /dev/null
fi

唯一需要注意的是Visual Studio必须在执行此脚本后启动,因为显然它只在启动时读取一次ENV,而不是每次它生成子git.exe进程。

以上是关于获取Visual Studio 2017以使用git的ssh-agent / ssh-add的主要内容,如果未能解决你的问题,请参考以下文章

未能为 Visual Studio 2017 构建 boost 1.68

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

如何以不同的名称保存 Visual Studio 项目(如另存为)?

如何在 Visual Studio 2017 中获取堆栈跟踪

更新 Visual Studio 2017,现在出现编译错误 C7510:“回调”:使用依赖模板名称必须以“模板”为前缀

使用 CMake 生成 Visual Studio 2017 项目