Visual Studio 2015中的Git(SSH)

Joh*_*ell 44 git visual-studio visual-studio-2015

因此,随着Visual Studio 2015刚刚发布,与git的集成更加紧密.

然而,似乎缺乏的功能是通过SSH的git.2013年有各种插件允许此功能(即GitExtensions)但我在2015年看不到任何插件.

GitHub插件似乎只适用于GitHub而不是通用的git repos.

我不是在寻找一个更好的观点,只有一些例子或文章,看看是否有人在Visual Studio 2015上运行Git + SSH.

Edw*_*son 49

没有.Visual Studio 2015(RTM)不支持用于Git遥控器的SSH.即使GitHub存储库使用GitHub插件(目前使用与Git存储库相同的连接机制,使用团队资源管理器,也是如此).

这是令人遗憾的,但有一些原因导致这种情况尚不可用:简而言之,我们认为,提供SSH 不良不安全比完全不提供SSH更糟糕,我们希望非常有信心我们提供的任何SSH实现都是高质量的.

也就是说,我们正在努力,并取得进展.微软将开始在Windows中包含OpenSSH(并且是该​​非常精细项目的赞助商).但是,我无法预测何时可以提供支持.

GitHub的扩展是开源的,所以这是可能的,它可能是能够使用不同的连接机制,并开始在团队资源管理器的核心Git支持前支持SSH.

  • 听起来他们已经让一些IE开发人员进入VS ...... :( (5认同)
  • @aateeque没有变化.:( (3认同)
  • 2017~MS可以在Windows 10中包含Ubuntu,但仍然不支持Visual Studio中的ssh?CMON .. (2认同)

GSB*_*Tom 7

以下是Visual Studio Update 2和Update 3的一些基本说明.请参阅BPas帖子中的基本内容链接,例如,您需要:

  • CMake(我使用3.5.2)
  • libssh2(我使用1.7.0)
  • libgit2源码(从BPas获取来源,如BPas链接中所述)

构建libssh2

  1. 我使用了libssh2 1.7.0.你可以使用旧版本,但不要因为你需要在VS2015中修复一些构建问题.
  2. 请执行下列操作:

    cd <libssh2 root dir> (e.g. wherever you extracted the source to)
    mkdir build && cd build
    cmake -DCRYPTO_BACKEND=WinCNG -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF ..
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在构建目录中打开生成的libssh2.sln

  4. 将构建类型设置为"Release"(这很重要!)
  5. 编辑libssh2项目,并将调用类型设置为__stdcall(例如/ Gz)
  6. 重建all,如果成功,生成的lib将在build/src/Release/libssh2.lib中

构建libgit2

  1. 请执行下列操作:

    cd <libgit2 source dir> (e.g. this is wherever you extracted the libgit2 source you got from VS2015's extensions directory, see BPas' link for details)
    mkdir build && cd build
    cmake -DCMAKE_BUILD_TYPE=Release -DSTDCALL=ON -DSTATIC_CRT=OFF -DUSE_SSH=OFF -DLIBSSH2_FOUND=TRUE -DLIBSSH2_INCLUDE_DIRS=<libssh2 root dir>/include -DLIBSSH2_LIBRARIES=<libssh2 root dir>/build/src/Release/libssh2.lib ..
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在构建目录中打开生成的libgit2.sln

  3. 将构建类型设置为"Release"
  4. 可选:修补src/transports/ssh.c以支持SSH RSA密钥身份验证,在函数request_creds中(第444行):

    if (!t->owner->cred_acquire_cb) {
        no_callback = 1;
    } else {
    
    Run Code Online (Sandbox Code Playgroud)

    有:

    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 {
    
    Run Code Online (Sandbox Code Playgroud)

    注意:这个补丁是从randomswdev帖子中的评论中抓取的,似乎在我的有限测试中工作正常.

  5. 重建全部,输出是git2.dll,替换Visual Studio 2015扩展目录中的libgit2-msvc.dll