2009-07-07 12 views
5

J'ai une boîte de Windows 2003 avec une configuration de serveur de ssh. J'ai msysgit (git version 1.6.2) installé localement et sur le serveur.Comment arrêter git via ssh sur Windows de résoudre le mauvais chemin?

Le serveur a le chemin absolu suivant à mes prises en pension:

e:\vc\git\myrepo.git 

lorsqu'un utilisateur se connecte, il/elle sera mis dans le répertoire de travail suivant:

e:\vc\git\ 

Lors de l'exécution de ce qui suit cmd sur ma machine dev:

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

Je reçois l'erreur suivante:

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

Selon mes journaux ssh il semble que git exécute ce cmd sur le serveur:

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

exécution qui commande localement (sur le serveur) échoue pour la même raison. Je pense que le problème est lié à git préfixant le chemin avec un '/'. Comment puis-je dire à git de ne pas le faire? Est-ce que cela devrait fonctionner?

Remarque: git-upload-pack fonctionne car j'ai ajouté \ gitinstallpath \ libexec \ git-core au chemin. Apparemment c'est un bug et il sera réparé dans le futur, c'était mon travail.

+0

Quel serveur SSH-vous en cours d'exécution sur le serveur? La partie de l'URL après l'utilisateur @ serveur doit être au format qu'il comprend. –

Répondre

6

J'ai résolu ce problème en commutant mon serveur ssh de winssh à openssh (via la couche cygwin). J'étais capable de me connecter correctement (comme indiqué ci-dessus) en utilisant winsshd, mais winsshd ne gérait pas correctement les chemins précédés de "/". Je pourrais probablement faire fonctionner winsshd, mais passer à cygwin et openssh était plus rapide.

Voici un good blog post pour lancer le programme d'installation si votre dans une situation similaire:

+1

+1 pour le super blog sur la configuration d'un serveur git + ssh sous Windows. –

4

Avez-vous essayé ce qui suit?

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

Notez la suppression de ".git" à la fin du chemin SSH. Vous avez seulement besoin de ce suffixe à la fin si le nom du répertoire distant l'a.

Avez-vous essayé un autre format d'URL SSH? Pour utiliser un chemin relatif, vous pouvez essayer:

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

Voir la git clone man page pour plus de détails sur les autres formats d'URL.

+0

1) le répertoire a .git. Désolé pour la faute de frappe, corrigé en question. 2) entraîne l'erreur: fatal: '' ~/myrepo.git '' ne semble pas être un dépôt git –

+0

J'ai aussi essayé: ssh: // myuser @ myip: myrepo.git mais ssh se plaint du port et n'est pas capable de se connecter. –

3

Si quelqu'un toujours intéressé par cette solution:

Le problème est - cmd.exe ne comprend pas les paramètres entre guillemets simples. Nous utilisons donc sh à la place.

Créer un fichier gup.sh avec la ligne

 
    git-upload-pack.exe $* 

et grp.sh avec

 
    git-receive-pack.exe $* 

sur le serveur!

Ensuite, exécutez:

 
    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'