Visual Studio 2015 Git无法使用SSH协议的解决方法
来源:互联网 发布:广州精点数据 编辑:程序博客网 时间:2024/05/21 21:47
背景
在实验室的CentOS服务器上按资料配置好了SSH协议的远程Git仓库,本想着用VS的git插件同步项目岂不是美滋滋,但实际操作后发现VS 2015并不支持SSH协议。
原因
Visual Studio里的libgit2本来是支持SSH协议的。但可能VS项目组担心OpenSSH协议的安全性而放弃了。具体的答案可以参考这个
解决方法
重编译并替换原有的libgit2,根据几篇资料整理出如下的步骤。
准备工作
下载如下工具
- Python (可能)
- libssh2源码
- CMake
- libgit2源码
libgit2的源码可以在VS2015的插件目录,如C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions 搜索libgit2-src,会找到一个或几个名为libgit2-src.zip的压缩包即是源码。
安装好Python和CMake,将libssh2和libgit2的文件夹解压到同一目录,假设为D:\tmp\libssh2和D:\tmp\libgit2。
编译libssh2
- 在libssh2的目录内新建文件夹build用于放置vs解决方案。
- 在build文件夹内Shift+右键打开命令窗口。
- 执行指令
cmake -DCRYPTO_BACKEND=WinCNG -DBUILD_SHARED_LIBS=OFF
创建解决方案 。
-DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF .. - 创建完成后,打开libssh2.sln,将生成方案设为“Release”。
- 选中libssh2项目,在VS的项目->属性->C/C++->高级->调用约定设为_stdcall(/Gz)。
- 重新生成解决方案。
编译libgit2
- 进入libgit2目录,同样创建build文件夹。
- 进入build文件夹打开命令窗口。
- 执行命令
cmake -DCMAKE_BUILD_TYPE=Release -DSTDCALL=ON -DSTATIC_CRT=OFF -DUSE_SSH=OFF -DLIBSSH2_FOUND=TRUE -DLIBSSH2_INCLUDE_DIRS=D:/tmp/libssh2/include -DLIBSSH2_LIBRARIES=D:/tmp/libssh2/build/src/Release/libssh2.lib ..
其中,DLIBSSH2_INCLUDE_DIRS代表你的libssh2的头文件位置,DLIBSSH2_LIBRARIES代表libssh2生成好的库文件位置。 - 打开libgit2.sln。
- 将生成方案设为“Release”。
- 重新生成解决方案。
(可选)修改libgit2使其可以通过公钥登录Git。
在编译前打开解决方案中的git2项目,选择src/transports/ssh.c,找到这一段代码,大概在421行。
if (!t->owner->cred_acquire_cb) { no_callback = 1;} else {
修改为
if (!t->owner->cred_acquire_cb) { if (user) { const char *val = NULL; val = getenv("USERPROFILE"); if (val) { char *szprivfilename = malloc(strlen(val) + 128); char *szpubfilename = malloc(strlen(val) + 128); strcpy(szprivfilename, val); strcat(szprivfilename, "/.ssh/id_rsa"); strcpy(szpubfilename, val); strcat(szpubfilename, "/.ssh/id_rsa.pub"); git_cred_ssh_key_new(&cred, user, szpubfilename, szprivfilename, ""); free(szprivfilename); free(szpubfilename); } if (!cred) { giterr_set(GITERR_SSH, "git_cred_ssh_key_new failed to initialize SSH credentials"); return -1; } } else { no_callback = 1; }} else {
再进行编译。
替换原有的DLL文件
- 关闭所有Visual Studio 2015的程序。
- 在libgit2的build->Release文件夹内找到git2.dll并重命名为git2-msvstfs.dll。
- 找到Visual Studio 2015的插件目录(参考前文),搜索git2-msvstfs.dll,将搜索到的文件重命名为git2-msvstfs.bak,并将我们编译好的dll文件复制到对应的文件夹内。
- 打开VS,大功告成!
注意事项
在上述的操作后,可能仍无法直接在Visual Studio 2015输入ssh协议地址。解决方法是打开需要设置的Git项目,在团队资源管理器->设置->存储库设置->远程中添加ssh协议的Git地址。如 ssh://你的账户名@远程仓库地址:仓库目录
参考资料
- Git (SSH) in Visual Studio 2015
- adding ssh support to visual studio
0 0
- Visual Studio 2015 Git无法使用SSH协议的解决方法
- git 无法使用ssh协议连接
- Android Studio使用git无法pull或commit的解决方法
- Visual Studio Code(vscode) git的使用
- 在Visual Studio 2015中使用Git
- Microsoft Visual Studio 2005 无法调试应用程序的解决方法
- Visual Studio 2005 无法显示设计视图的解决方法
- Visual Studio 2005 无法显示设计视图的解决方法
- Visual Studio无法打开数据库架构项目(.dbproj)的解决方法
- Visual Studio 2008无法创建智能设备项目的解决方法
- Visual Studio 2008无法创建智能设备项目的解决方法
- Visual Studio 2017通过SSH支持Git
- Visual Studio 2015 Git 插件多账号切换导致 403 错误 的解决方法
- visual studio 2015安装 无法启动程序,因为计算机丢失D3DCOMPILER_47.dll 的解决方法
- Visual Studio 2013中的源代码管理工具Git的使用
- Visual studio 2012 intelliSense无法正常使用的问题
- visual studio的使用
- visual studio的使用
- 实验吧CTF刷题记录(web篇三)
- visibility:hidden与display:none区别(关于重绘和渲染)
- python生成回数
- Gulp资料大全:入门、插件、脚手架、包清单
- java——日期时间
- Visual Studio 2015 Git无法使用SSH协议的解决方法
- YII模型更新/修改记录方法
- 字符串相关操作 拷贝,循环移动
- java 实现节点链表
- 老--质价比 (sdut oj)
- Linux系统调用--getpid/getppid函数详解
- Microsoft Remote Desktop for Mac APPSTORE商店下载
- 关于启动hadoop的一个小小小问题
- 【Python爬虫】利用Selenium等待Ajax加载及模拟自动翻页,爬取东方财富网公司公告