86 votes

Comment rendre mon dépôt local disponible pour git-pull ?

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

J'aimerais que mon dépôt de copie de travail soit disponible en tant qu'origine pour ma machine de construction (une VM sur un autre hôte physique), afin que les modifications que je fais sur ma copie de travail puissent être construites et testées sur la machine de construction sans avoir à passer d'abord par GitHub. J'ai déjà un build pour le dépôt GitHub, mais j'aimerais que ce soit un dépôt/build "en or" ; c'est à dire que si quelque chose va dans ce dépôt, le build contre GitHub devrait être garanti de réussir.

J'ai consulté la documentation sur les URL Git, et je vois qu'il est possible d'utiliser une URL sous la forme suivante git://host.xz[:port]/path/to/repo.git/ (voir par exemple documentation git-clone ). Je veux faire cela de la manière la plus simple possible, avec un minimum de configuration : Je ne veux pas avoir à configurer un démon SSH ou un serveur web juste pour publier cela sur ma machine de construction.

Je tourne sous Windows 7 x64 RC, j'ai installé MSysGit et TortoiseGit, et j'ai ouvert le port par défaut de Git (9814) sur le pare-feu. Veuillez supposer que la copie de travail se trouve à l'adresse suivante D:\Visual Studio Projects\MyGitRepo et le nom d'hôte est devbox . La machine de construction est Windows Server 2008 x64. J'ai essayé la commande suivante sur la machine de construction, avec le résultat associé :

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)

Ai-je oublié quelque chose ?

124voto

Jakub Narębski Points 87537

Il existe cinq possibilités pour mettre en place un référentiel à partir duquel il est possible de tirer des informations :

  • système de fichiers local : git clone /path/to/repo o git clone file://path/to/repo . Moins de travail si vous avez un système de fichiers en réseau, mais pas d'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 tous et vous devez également exécuter (peut-être automatiquement, à partir d'un crochet) git-update-server-info pour générer les informations nécessaires à la recherche et à l'extraction par le biais de protocoles "muets".
  • SSH : git clone ssh://example.com/srv/git/repo o git clone example.com:/srv/git/repo . Vous devez installer un serveur SSH (démon SSH), et avoir installé SSH 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, il n'est pas nécessaire de l'exécuter en tant que service). git-daemon fait partie de git.
  • liasse : Vous générez un bundle sur le serveur à l'aide de git-bundle le transférer sur une machine cliente de quelque manière que ce soit (même via USB), et le cloner à l'aide de la commande git clone file.bndl (si le clone ne fonctionne pas, vous pouvez faire "git init", "git remote add" et "git fetch").

Ce qui 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 à faire fonctionner git-daemon en tant que service sous MS Windows. Il n'y a rien dans l'annonce de la dernière version de msysGit sur le fait que git-daemon ne fonctionne pas, cependant.

17voto

Pod Points 2526

En plus des réponses de Jakub Narębski, il y a un autre moyen, plus en ligne avec votre question originale. Vous pourriez cloner à partir de github comme vous le faites habituellement, puis lorsque vous voulez effectuer un pull unique à partir de votre repo local, faites simplement ceci :

git pull /path/to/repo master

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

2voto

metadings Points 1705

Si vous avez un chemin comme

C:\Project\

et vous l'avez fait git init déjà, vous avez donc également 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 ( nu est important),
retourner à votre C:\Project\ et faire un git remote add-url local ..\.git\Project .
Il ne vous reste plus qu'à faire git add -A , git commit -m "HelloWorld" y git push local master .

Vous pouvez partager le Project le connecter à Z: et faire git clone Z:\Project - que vous pouvez utiliser maintenant git pull origin master y git push origin master pour transférer des modifications d'un ordinateur à l'autre.

1voto

Alec the Geek Points 1107

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

1voto

davenpcj Points 3424

J'ai récemment modifié l'un de mes projets git pour qu'il se réplique sur un serveur HTTP en utilisant sitecopy pour effectuer les téléchargements de fichiers.

C'est assez facile, il suffit d'utiliser git update-server-info puis mettez en miroir le répertoire .git dans 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 à merveille, et je n'ai besoin de rien d'autre sur le serveur qu'un accès FTP, bien que sitecopy prenne également en charge webdav.

Je ne recommande toutefois pas l'utilisation de sitecopy, car il ne permet pas de synchroniser correctement plusieurs machines. Pour mon projet, le dépôt HTTP est en lecture seule, et les mises à jour de l'or proviennent d'une seule machine, donc cela fonctionne assez bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X