2009-07-07 10 views
5

Ich habe eine Windows 2003-Box mit einem SSH-Server-Setup. Ich habe msysgit (git Version 1.6.2) sowohl lokal als auch auf dem Server installiert.Wie git über ssh in Windows zu stoppen von der Auflösung des falschen Pfades?

Der Server verfügt über die folgenden absoluten Pfad zu meinem repos:

e:\vc\git\myrepo.git 

, wenn sich ein Benutzer anmeldet er/sie in der folgenden Arbeitsverzeichnis gestellt werden:

e:\vc\git\ 

Wenn die folgenden Programme ausgeführt wird cmd auf meinem dev Maschine:

git clone ssh://[email protected]/myrepo.git testrepo 

ich die folgende Fehlermeldung erhalten:

fatal: ''/myrepo.git'' does not appear to be a git repository 

Nach meiner ssh-Protokolle scheint es, dass git dieses cmd auf dem Server ausgeführt wird:

'cmd.exe /c git-upload-pack '/myrepo.git'' 

diesen Befehl lokal durchführen (auf dem Server) nicht aus dem gleichen Grund. Ich denke, das Problem hängt mit Git zusammen, das den Pfad mit einem '/' voranstellt. Wie sage ich git, das nicht zu tun? Sollte das funktionieren?

Hinweis: git-upload-pack funktioniert, weil ich \ gitistallpath \ libexec \ git-core dem Pfad hinzugefügt habe. Anscheinend ist das ein Fehler und wird in Zukunft behoben werden, das war meine Arbeit.

+0

Was SSH-Server auf dem Server ausgeführt wird? Der Teil der URL nach dem Benutzer @ Server muss in dem Format vorliegen, das er versteht. –

Antwort

6

Ich löste dies, indem ich meinen ssh-Server von winssh auf openssh (über die Cygwin-Ebene) umschaltete. Ich konnte gut verbinden (wie oben erwähnt) mit Winsshd, aber Winsshd nicht richtig behandelt Pfade mit dem Präfix "/". Ich könnte wahrscheinlich winsshd zur Arbeit bringen, aber zu cygwin und openssh zu wechseln war schneller.

Hier ist ein good blog post das Setup zu treten beginnen, wenn Ihr in einer ähnlichen Situation:

+1

+1 für den tollen Blogbeitrag zum Einrichten eines git + ssh Servers unter Windows. –

4

Haben Sie Folgendes versucht?

Beachten Sie die Entfernung von ".git" vom Ende des SSH-Pfads. Sie benötigen dieses Suffix nur am Ende, wenn der Name des entfernten Verzeichnisses es hat.

Haben Sie auch ein anderes SSH-URL-Format ausprobiert? Um einen relativen Pfad zu verwenden, können Sie versuchen:

git clone ssh://[email protected]/~/myrepo testrepo 

die git clone man page für Details auf andere URL-Formate.

+0

1) Das Verzeichnis hat .git. Entschuldigung für den Tippfehler, der in Frage gestellt wurde. 2) führt zu dem Fehler: fatal: '' ~/myrepo.git '' scheint kein git-Repository zu sein –

+0

Ich habe auch versucht: ssh: // myuser @ myip: myrepo.git aber ssh beklagt sich über den Port und kann keine Verbindung herstellen. –

3

Wenn jemand noch Interesse an Abhilfe:

Das Problem ist - cmd.exe ist in einfachen Anführungszeichen Parameter nicht verstehen. Also benutzen wir stattdessen sh.

Datei gup.sh erstellen mit Linie

 
    git-upload-pack.exe $* 

und grp.sh mit

 
    git-receive-pack.exe $* 

auf dem Server!

Dann laufen:

 
    git clone -u 'sh gup.sh' ssh://[email protected]/e/vc/git/myrepo.git testrepo 
    git config remote.origin.uploadpack 'sh gup.sh' 
    git config remote.origin.receivepack 'sh grp.sh'