Подтвердить что ты не робот

Git (SSH) в Visual Studio 2015

Таким образом, только что выпущенная версия Visual Studio 2015 имеет гораздо более интегрированную привязку с git.

Однако функция, которая, кажется, отсутствует, git по SSH. Существуют различные плагины на 2013 год, которые позволяют использовать эту функциональность (например, GitExtensions), но я не вижу никаких результатов с 2015 года.

Плагин GitHub работает только с GitHub, а не с репозиториями git.

Я не ищу лучшего мнения о том, что лучше, только некоторые примеры или статьи, чтобы узнать, есть ли у кого-нибудь Git + SSH на Visual Studio 2015.

4b9b3361

Ответ 1

Нет. Visual Studio 2015 (RTM) не поддерживает SSH для пулов Git. Это справедливо даже с репозиториями GitHub с использованием подключаемого модуля GitHub (который в настоящее время использует тот же механизм соединения для репозиториев Git, как и любой другой репозиторий Git, используя Team Explorer.)

Это вызывает сожаление, но есть несколько причин, почему это пока недоступно: короткий ответ заключается в том, что, по нашему мнению, предоставление SSH плохо или небезопасно хуже, чем отсутствие SSH вообще, и мы хотели бы быть очень уверен, что любая реализация SSH, которую мы предоставляем, имеет высокое качество.

Тем не менее, мы работаем над этим и добиваемся прогресса. Microsoft начнет включать OpenSSH в Windows (и является спонсором этого очень прекрасного проекта). Однако я не могу предсказать, когда будет доступна поддержка.

Расширение GatHub является открытым исходным кодом, поэтому возможно, что он сможет использовать другой механизм подключения и начать поддерживать SSH до поддержки ядра Git в Team Explorer.

Ответ 2

Вот некоторые основные инструкции для Visual Studio Update 2 и Update 3. См. ссылку в сообщении BPas для основного материала, например. вам понадобится:

  • CMake (я использовал 3.5.2)
  • libssh2 (я использовал 1.7.0)
  • источник libgit2 (возьмите источник из VS 2015, как указано в ссылке BPas)

Сборка libssh2

  • Я использовал libssh2 1.7.0. Вы можете использовать более старые версии, но не так, как вам нужно исправить некоторые проблемы с сборкой в ​​VS2015.
  • Выполните следующие действия:

    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 ..
    
  • Откройте полученный файл libssh2.sln в каталоге сборки

  • Установите тип сборки в "Release" (это важно!)
  • Отредактируйте проект libssh2 и установите для вызывающего типа значение __stdcall (например,/Gz)
  • Восстановить все, если удастся, результирующий lib будет в файле build/src/Release/libssh2.lib

Построить libgit2

  • Выполните следующие действия:

    cd <libgit2 source dir> (e.g. this is wherever you extracted the libgit2 source you got from VS2015 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 ..
    
  • Откройте полученный файл libgit2.sln в каталоге сборки

  • Задайте тип сборки "Release"
  • Дополнительно: патч src/transports/ssh.c для поддержки аутентификации ключа SSH RSA в функции request_creds (вокруг строки 444):

    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 {
    

    Примечание: этот патч был схвачен из одного комментария в сообщении randomswdev, кажется, отлично работает от моего ограниченного тестирования.

  • Rebuild All, вывод git2.dll, замените libgit2-msvc.dll в каталоге расширений Visual Studio 2015

Ответ 3

В соответствии с BPas: для Visual Studio 2015 можно создать версию с поддержкой SSH. Кроме того, у меня есть патч для поддержки открытого/закрытого ключа:

https://github.com/PROGrand/git2-msvstfs-ssh-patch

Ответ 5

Здесь была глупость по поводу добавления вашей git в визуальную студию с помощью git bash. Несмотря на то, что добавление будет работать, создание коммитов также является вариантом, но для синхронизации их все равно потребуется git bash. Так что это было бы бесполезно.