web-dev-qa-db-fra.com

Comment puis-je rendre mon référentiel local disponible pour git-pull?

J'ai un dépôt de copie de travail sur lequel je travaille sans problème; l'origine de ce référentiel est sur GitHub.

Je voudrais rendre mon référentiel de copie de travail disponible en tant qu'origine pour ma machine de génération (a VM sur un autre hôte physique), afin que les engagements que je fais sur ma copie de travail puissent être construits et testés sur la machine de compilation sans avoir à passer par GitHub au préalable. J'ai déjà une compilation pour le dépôt GitHub en cours, mais j'aimerais que ce soit un dépôt/build "en or"; c'est-à-dire, si quelque chose se passe là-dedans, la construction contre GitHub doit être garanti pour réussir.

J'ai regardé la documentation sur les URL Git, et je vois qu'il y a la possibilité d'utiliser une URL sous la forme git://Host.xz[:port]/path/to/repo.git/ (voir, par exemple, documentation git-clone ). Je veux le faire de la manière la plus simple possible, avec le minimum de configuration: je ne veux pas avoir à configurer un démon SSH ou un serveur Web juste pour le publier sur ma machine de génération.

J'utilise Windows 7 x64 RC, j'ai MSysGit et TortoiseGit installés, et j'ai ouvert le port par défaut de Git (9814) sur le pare-feu. Veuillez supposer que le dépôt de copie de travail est à D:\Visual Studio Projects\MyGitRepo, et le nom d'hôte est devbox. La machine de génération est Windows Server 2008 x64. J'ai essayé la commande suivante sur la machine de génération, avec la sortie associée:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

Suis-je en train de manquer quelque chose?

86
alastairs

Il existe cinq possibilités pour mettre en place un référentiel à extraire:

  • système de fichiers local : git clone /path/to/repo ou git clone file://path/to/repo. Moins de travail si vous avez un système de fichiers en réseau, mais pas une utilisation très efficace du réseau. (C'est presque exactement la solution proposée par Joakim Elofsson )
  • Protocoles HTTP : git clone http://example.com/repo. Vous avez besoin de any serveur Web, et vous devez également exécuter (peut-être automatiquement, à partir d'un hook) git-update-server-info pour générer les informations requises pour la récupération/tirant via des protocoles "stupides".
  • [~ # ~] ssh [~ # ~] : git clone ssh://example.com/srv/git/repo ou git clone example.com:/srv/git/repo. Vous devez configurer le serveur SSH (démon SSH) et avoir SSH installé sur le client (par exemple PuTTY sur MS Windows).
  • protocole git : git clone git://example.com/repo. Vous devez exécuter git-daemon sur le serveur; voir la documentation pour plus de détails (vous pouvez l'exécuter en tant que processus autonome uniquement pour la récupération, pas nécessairement exécuter en tant que service). git-daemon fait partie de git.
  • bundle : Vous générez un bundle sur le serveur à l'aide de la commande git-bundle , transférez-le sur une machine client de n'importe quelle manière (même via USB) et cloner à l'aide de git clone file.bndl (si le clone ne fonctionne pas, vous pouvez faire "git init", "git remote add" et "git fetch").

Ce qui vous manque dans votre exemple est probablement l'exécution de git-daemon sur le serveur. Cela, ou une mauvaise configuration de git-daemon.

Malheureusement, je ne peux pas vous aider à exécuter git-daemon en tant que service sur MS Windows. Il n'y a cependant rien dans l'annonce de la dernière version de msysGit concernant git-daemon ne fonctionnant pas.

122
Jakub Narębski

En plus des réponses de Jakub Narębski, il existe un autre moyen, plus conforme à votre question initiale. Vous pouvez cloner à partir de github comme vous le faites habituellement, puis lorsque vous souhaitez effectuer un tirage unique de votre référentiel local, faites simplement ceci:

git pull /path/to/repo master

(au lieu de maître, vous pouvez mettre n'importe quel nom de branche.)

16
Pod

J'ai récemment changé l'un de mes projets git pour se répliquer sur un serveur HTTP à l'aide de la copie de site pour effectuer les téléchargements de fichiers réels.

C'est assez simple, utilisez simplement git update-server-info puis mettez en miroir le répertoire .git vers un répertoire accessible par http sur votre serveur. J'ai utilisé "project.git", ce qui est assez courant.

Git pull from http: // site/project-git fonctionne comme un champion, et je n'ai rien à avoir sur le serveur sauf un accès FTP, bien que sitecopy supporte également webdav.

Cependant, je ne recommande pas d'utiliser la sitecopy, car elle ne permet pas de synchroniser correctement plusieurs machines. Pour mon projet, le référentiel HTTP est en lecture seule, et les mises à jour Gold proviennent d'une seule machine, donc cela fonctionne assez bien.

1
davenpcj

La route ssh fonctionne bien mais nécessite un serveur ssh distant. Si vous avez une plate-forme Windows, Cygwin fournit un serveur ssh qui fonctionne avec Git, mais mettez à niveau manuellement Git si vous utilisez Cygwin Git (j'ai écrit quelques astuces sur http://alecthegeek.wordpress.com/2009/01/21/top-tip-upgrade-git-on-cygwin / ).

1
Alec the Geek

Si vous avez un chemin comme

C:\Project\

et vous avez fait git init déjà, vous avez donc aussi un dossier

C:\Project\.git\

Vous créez maintenant un nouveau dossier

C:\.git\

Allez dans ce dossier et exécutez git clone --bare ..\Project (n est important),
retournez à votre C:\Project\ dossier et faites un git remote add-url local ..\.git\Project.
Maintenant, vous faites simplement git add -A, git commit -m "HelloWorld" et git Push local master.

Vous pouvez partager le dossier Project, connectez-le à Z: et fait git clone Z:\Project - vous pouvez utiliser maintenant git pull Origin master et git Push Origin master pour pousser/tirer les modifications d'un ordinateur à un autre.

1
metadings

Si votre hôte distant est dans le même réseau Windows, c'est-à-dire que vous pouvez y accéder en tant que\remotehost, vous pouvez mapper le lecteur réseau dans l'Explorateur, disons z: ->\remotehost\repodir, après quoi vous pouvez utiliser 'git clone/z/myproject 'pour cloner un projet

0
jnr