Wie git ich von einem Windows-Rechner über ssh klonen?

Lesezeit: 3 Minuten

Benutzer-Avatar
aushämmern

ich kann ssh windowsmachine von Linux auf einen Windows-Rechner zugreifen, und von dort aus kann ich git init --bare foo.gitsagen mir Initialized empty Git repository in C:/Users/unhammer/foo.git/

aber wie klone ich das von der Unix-Seite?

$ git clone ssh://windowsmachine:foo.git
Cloning into 'foo'...
fatal: No path specified. See 'man git-pull' for valid url syntax

$ git clone ssh://windowsmachine:C:\\Users\\unhammer\\foo.git
Cloning into '\Users\unhammer\foo'...
fatal: No path specified. See 'man git-pull' for valid url syntax

$ git clone ssh://windowsmachine:/foo.git
Cloning into 'foo'...
fatal: ''/foo.git'' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

und ähnliche Nachrichten für /C:/Users/unhammer/foo.git und
/C/Users/unhammer/foo.git und /Users/unhammer/foo.git.

Beachten Sie die doppelten einfachen Anführungszeichen:

fatal: ''/Users/unhammer/foo.git'' does not appear to be a git repository

Das passiert nicht, wenn ich es versuche git clone linuxmachine:/some/path/that/does/not/exist.git, dann verwendet git einfache einfache Anführungszeichen. (Vielleicht ist das das Problem, git-for-windows oder etwas, das zusätzliche Anführungszeichen anwendet?)

  • Dies hängt ein wenig vom verwendeten SSH-Server ab. Siehe stackoverflow.com/a/8050564/7976758. Versuchen git clone ssh://windowsmachine/Users/unhammer/foo.git.

    – promov

    18. Dezember 2018 um 18:24 Uhr

  • Es ist das in Windows 10 integrierte (Einstellung→Apps & Features→Optionale Features verwalten→Feature hinzufügen→OpenSSH-Server). Es gab ein bisschen ab Gefummel um es einzurichten, aber ich kann scp -r windowsmachine:/Users/unhammer.foo.gitwährend git clone ssh://windowsmachine/Users/unhammer/foo.git scheitert (''/Users/unhammer/foo.git'' does not appear to be a git repository).

    – Aushämmern

    19. Dezember 2018 um 8:18 Uhr

  • Tatsächlich passiert es, weil die Standard-Windows-Shell einfache Anführungszeichen als Literale interpretiert und Git immer einfache Anführungszeichen um seine Argumente an die Remote-Shell sendet

    – iPherisch

    15. Dezember 2019 um 9:25 Uhr

Die einfachste Lösung ist Ändern Sie die Standard-Windows-OpenSSH-Shell in bash. Sie können dies einfach über Powershell auf dem Windows-Computer tun:

powershell
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\Git\bin\bash.exe" -PropertyType String -Force

Möglicherweise müssen Sie OpenSSH auf dem Windows-Computer neu starten und/oder vorhandene SSH-Verbindungen vom Client beenden, bevor es wirksam wird. Jetzt können Sie ohne zusätzliche Option -u klonen:

git clone ssh://windowsmachine/c/Users/unhammer/foo.git

(und wenn Sie zuvor Uploadpack/Receivepack angegeben haben, entfernen Sie sie aus .git/config)

  • Schön, hat bei mir funktioniert, musste aber Powershell als Administrator ausführen.

    – joshkörperlich

    2. März um 3:37

Dem Link von @phd zu https://stackoverflow.com/a/8050564/7976758 folgend, fand ich einen Verweis auf https://stackoverflow.com/a/2323826/69663 mit einer Problemumgehung für das Zitatproblem. Folgendes habe ich getan:

Öffnen Sie unter Windows Git Bash und in meinem Homedir:

echo 'git-receive-pack "[email protected]"' >grp.sh
echo 'git-upload-pack "[email protected]"' >gup.sh

Klonen Sie unter Linux unter Angabe des Upload-Pakets:

git clone -u '"C:/Program Files/Git/bin/bash.exe" gup.sh' ssh://windowsmachine/c/Users/unhammer/foo.git
cd foo
git config remote.origin.uploadpack '"C:\Program Files\Git\bin\bash.exe" gup.sh'
git config remote.origin.receivepack '"C:\Program Files\Git\bin\bash.exe" grp.sh'

Der Repo-Pfad ist also derjenige, den Git Bash anzeigt (/c/Users/$username/$repo), nirgends ein Doppelpunkt.


https://github.com/PowerShell/Win32-OpenSSH/issues/1082 scheint verwandt.

1014570cookie-checkWie git ich von einem Windows-Rechner über ssh klonen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy