Comment puis-je pousser un référentiel Git dans un dossier sur SSH?

53

J'ai un dossier appelé mon-projet dans lequel j'ai fait git init , git commit -a , etc.

Maintenant, je veux le placer dans un dossier vide de / mnt / foo / bar sur un serveur distant.

Comment puis-je faire ceci?

J'ai essayé, d'après ce que j'avais lu:

cd my-project
git remote add origin ssh://user@host/mnt/foo/bar/my-project.git
git push origin master

ce qui ne semblait pas juste (je suppose que la source viendrait avant la destination) et cela a échoué:

fatal: '/mnt/boxee/git/midwinter-physiotherapy.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

J'aimerais que cela fonctionne de sorte que je n'ai pas besoin d'accéder à l'hôte distant et d'initier manuellement un référentiel Git à chaque fois ... dois-je le faire? Est-ce que je vais dans la bonne voie?

Merci.

riches
la source

Réponses:

56

La commande est correcte. Cependant, l'adresse distante doit aussi pointer vers un référentiel Git initialisé. C'est un travail ponctuel, cependant.

ssh user@host "git init --bare /mnt/foo/bar/my-project.git"

(Dans Git, un référentiel "nu" en est un sans arbre de travail.)

Grawity
la source
11

Si vous voulez à la fois pousser vers le référentiel et mettre les fichiers à jour sur le serveur , vous pouvez créer un hook git côté serveur pour extraire les fichiers après leur envoi. Dans le répertoire git côté serveur , /hooks/créez un fichier nommé post-receiveet ajoutez le code suivant (mettez à jour les répertoires pour qu'ils correspondent à votre structure de dossiers):

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

Puis donnez les autorisations appropriées au fichier en utilisant chmod +x post-receive

Plus d'informations et une explication détaillée ici: https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps

Kyle Chadha
la source
2

Si vous ne souhaitez pas créer le référentiel manuellement sur le serveur, vous pouvez installer gitosis , qui automatisera le processus. Mais vous devez avoir un processus sur le serveur pour créer le référentiel - vous ne pouvez pas le faire via une connexion git ssh du client.

Mike Scott
la source