webentwicklung-frage-antwort-db.com.de

Git (SSH) in Visual Studio 2015

Mit dem Erscheinen von Visual Studio 2015 gibt es eine viel stärker integrierte Anbindung an git. 

Allerdings scheint das Feature, das anscheinend fehlt, über SSH hinauszugehen. Es gibt verschiedene Plugins für 2013, die diese Funktionalität zulassen (d. H. GitExtensions). 2015 kann ich jedoch keine sehen. 

GitHub-Plugin scheint nur mit GitHub und nicht mit generischen Git-Repos zu funktionieren. 

Ich bin nicht auf der Suche nach einer Meinung, die besser ist, nur einige Beispiele oder Artikel, um zu sehen, ob jemand Git + SSH für Visual Studio 2015 zum Laufen gebracht hat. 

43
John Mitchell

Nein. Visual Studio 2015 (RTM) unterstützt kein SSH für Git-Remotes. Dies gilt auch für GitHub-Repositorys, die das GitHub-Plug-In verwenden (das derzeit den gleichen Verbindungsmechanismus für Git-Repositorys verwendet wie jedes andere Git-Repository, das Team Explorer verwendet.)

Dies ist bedauerlich, aber es gibt eine Reihe von Gründen, warum dies noch nicht verfügbar ist: Die kurze Antwort lautet, dass die Bereitstellung von SSH schlecht oder unsicherunserer Meinung nach schlimmer ist als SSH bereitzustellen Überhaupt, und wir möchten sehr zuversichtlich sein, dass jede von uns bereitgestellte SSH-Implementierung von hoher Qualität ist.

Das heißt, wir arbeiten daran und machen Fortschritte. Microsoft beginnt mit OpenSSH in Windows (und ist ein Sponsor dieses sehr guten Projekts). Ich kann jedoch keine Vorhersagen treffen, wann der Support verfügbar ist.

Die GitHub-Erweiterung ist Open Source. Daher ist es möglich, dass ein anderer Verbindungsmechanismus verwendet werden kann und SSH vor der Kern-Git-Unterstützung in Team Explorer unterstützt wird.

49
Edward Thomson

Im Folgenden finden Sie einige grundlegende Anweisungen für Visual Studio Update 2 und Update 3. Weitere Informationen zu den Grundfunktionen finden Sie unter dem Link in BPas Beitrag. Du brauchst:

  • CMake (ich habe 3.5.2 verwendet)
  • libssh2 (ich habe 1.7.0 verwendet) 
  • libgit2 source (greifen Sie die Quelle von VS 2015 wie im Link von BPas angegeben)

libssh2 erstellen

  1. Ich habe libssh2 1.7.0 verwendet. Sie können ältere Versionen verwenden, müssen jedoch einige Build-Probleme in VS2015 beheben.
  2. Mach Folgendes:

    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. Öffnen Sie die resultierende Datei libssh2.sln im Build-Verzeichnis

  4. Setze den Build-Typ auf "Release" (das ist wichtig!)
  5. Bearbeiten Sie das libssh2-Projekt und setzen Sie den aufrufenden Typ auf __stdcall (z. B./Gz).
  6. Alles neu aufbauen, falls erfolgreich, wird die resultierende lib in build/src/Release/libssh2.lib sein

Build libgit2

  1. Mach Folgendes:

    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. Öffnen Sie die resultierende Datei libgit2.sln im Build-Verzeichnis

  3. Setze den Build-Typ auf "Release"
  4. Optional: Patch src/transports/ssh.c zur Unterstützung der SSH-RSA-Schlüsselauthentifizierung in Funktion request_creds (in Zeile 444):

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

    mit:

    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 {
    

    Hinweis: Dieser Patch wurde aus den Kommentaren in randomswdevs Beitrag herausgegriffen, scheint jedoch aufgrund meiner eingeschränkten Tests gut zu funktionieren.

  5. Alles neu erstellen, Ausgabe ist git2.dll, ersetzen Sie libgit2-msvc.dll in Ihrem Visual Studio 2015-Erweiterungsverzeichnis
7
GSBTom

Anpassen an BPas: Für Visual Studio 2015 ist es möglich, eine SSH-fähige Version zu erstellen. Außerdem habe ich einen Patch für die Unterstützung des öffentlichen/privaten Schlüssels:

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

4

Sie können die ssh-Unterstützung aktivieren, indem Sie die mit Visual Studio 2015 bereitgestellte GIT-Bibliothek neu kompilieren. Im folgenden Artikel werden die erforderlichen Schritte beschrieben:

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

3
BPas

Früher gab es Blödsinn über das Hinzufügen eines Gits zu Visual Studio mithilfe der Git-Bas. Auch wenn das Hinzufügen funktionieren würde, wäre das Erstellen von Commits eine Option, aber das Synchronisieren dieser Elemente würde immer noch die Git-Bas. Benötigen irgendwie nutzlos.

0
user5895940