web-dev-qa-db-fra.com

Git (SSH) dans Visual Studio 2015

Donc, avec Visual Studio 2015 qui vient de sortir, il existe un lien beaucoup plus intégré avec git. 

Cependant, la fonctionnalité qui semble faire défaut est git over SSH. Il existe différents plugins pour 2013 qui permettent cette fonctionnalité (par exemple, GitExtensions), mais je ne peux en voir aucun avec 2015. 

Le plugin GitHub ne semble fonctionner qu'avec GitHub et non avec des dépôts génériques git. 

Je ne cherche pas à savoir quel est le meilleur. Il suffit de quelques exemples ou d'articles pour voir si quelqu'un a réussi à faire fonctionner Git + SSH sous Visual Studio 2015. 

43
John Mitchell

Non. Visual Studio 2015 (RTM) ne prend pas en charge SSH pour les télécommandes Git. Cela est vrai même avec les référentiels GitHub utilisant le plug-in GitHub (qui, à l'heure actuelle, utilise le même mécanisme de connexion pour les référentiels Git que tout autre référentiel Git utilisant Team Explorer.)

C’est regrettable, mais il n’existe pas encore de raisons qui expliquent pourquoi cela n’est pas encore disponible: la réponse courte est qu’à notre avis, fournir SSH médiocre ou insécurité, est pire que ne pas fournir SSH du tout nous aimerions avoir la certitude que toute implémentation SSH que nous fournissons est de haute qualité.

Cela dit, nous y travaillons et faisons des progrès. Microsoft va commencer à inclure OpenSSH dans Windows (et sponsor de ce très beau projet). Cependant, je ne peux pas prédire quand un support pourrait être disponible.

L’extension GitHub est open source. Il est donc possible qu’elle puisse utiliser un mécanisme de connexion différent et commencer à prendre en charge SSH avant la prise en charge principale de Git dans Team Explorer.

49
Edward Thomson

Voici quelques instructions de base pour Visual Studio Update 2 et Update 3. Voir le lien dans l'article du BPas pour connaître les éléments de base, par exemple. tu auras besoin:

  • CMake (j'ai utilisé 3.5.2)
  • libssh2 (j'ai utilisé 1.7.0) 
  • source libgit2 (récupérez le source de VS 2015 comme indiqué dans le lien de BPas)

Construire libssh2

  1. J'ai utilisé libssh2 1.7.0. Vous pouvez utiliser plus ancien, mais ne le faites pas car vous aurez besoin de résoudre certains problèmes de construction dans VS2015.
  2. Faites ce qui suit:

    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 ..
    
  3. Ouvrez le libssh2.sln résultant dans le répertoire de construction

  4. Définissez le type de construction sur "Release" (c'est important!)
  5. Modifiez le projet libssh2 et définissez le type d'appel sur __stdcall (par exemple,/Gz).
  6. Tout reconstruire, en cas de succès, la bibliothèque résultante sera dans build/src/Release/libssh2.lib

Construire libgit2

  1. Faites ce qui suit:

    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 ..
    
  2. Ouvrez le libgit2.sln résultant dans le répertoire de construction

  3. Définissez le type de construction sur "Release"
  4. Facultatif: corrigez src/transports/ssh.c pour prendre en charge l'authentification de clé SSH RSA, dans la fonction request_creds (autour de la ligne 444):

    if (!t->owner->cred_acquire_cb) {
        no_callback = 1;
    } else {
    

    avec:

    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 {
    

    Remarque: ce correctif a été récupéré dans l'un des commentaires du message de randomswdev, semble bien fonctionner après mes tests limités.

  5. Tout reconstruire, la sortie est git2.dll, remplacez libgit2-msvc.dll dans votre répertoire d'extensions Visual Studio 2015
7
GSBTom

Conforme aux BPas: pour Visual Studio 2015, il est possible de créer une version activée pour SSH. De plus, j'ai un correctif pour le support d'authentification de clé publique/privée:

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

4

Il est possible d'activer le support SSH en recompilant la bibliothèque GIT distribuée avec Visual Studio 2015. L'article suivant décrit les étapes requises:

http://randomswdev.blogspot.it/2015/07/adding-ssh-support-to-visual-studio.html

3
BPas

Avant, il était absurde d'ajouter votre git à Visual Studio à l'aide de git bash . Même si l'ajout fonctionnait, créer des commits était également une option, mais leur synchronisation nécessiterait toujours le git bash ..__ un peu inutile.

0
user5895940