获取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.exe
,ssh-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:“回调”:使用依赖模板名称必须以“模板”为前缀