2009-06-10 13 views
76

Tengo un repositorio de copia de trabajo en el que he estado trabajando sin problemas; el origen de este repositorio está en GitHub.¿Cómo puedo hacer que mi repositorio local esté disponible para git-pull?

Me gustaría hacer que mi repositorio de copia de trabajo esté disponible como origen para mi máquina de creación (una VM en otro host físico), de modo que las confirmaciones que realice en mi copia de trabajo se puedan construir y probar en la máquina de compilación sin tener que pasar por GitHub primero. Ya tengo una compilación para el repositorio de GitHub, pero me gustaría que este sea un repositorio/compilación "dorado"; es decir, si algo va allí, la construcción contra GitHub debe garantizarse que pase.

He revisado la documentación en las URL de Git y veo que existe la opción de usar una URL en el formulario git://host.xz[:port]/path/to/repo.git/ (consulte, por ejemplo, git-clone documentation). Quiero hacer esto de la manera más simple posible, con la configuración mínima: no quiero tener que configurar un daemon SSH o servidor web solo para publicar esto en mi máquina de compilación.

Estoy ejecutando Windows 7 x64 RC, tengo MSysGit y TortoiseGit instalados, y he abierto el puerto predeterminado de Git (9814) en el firewall. Asuma que el repositorio de copia de trabajo está en D:\Visual Studio Projects\MyGitRepo, y el nombre de host es devbox. La máquina de compilación es Windows Server 2008 x64. He estado tratando el siguiente comando en la máquina de construcción, con la salida asociada:

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) 

Me estoy perdiendo algo? Existen

+0

¿No puede simplemente configurar un recurso compartido localmente, y luego hacer 'git clone \\ workmachine \ share' desde su buildmachine? No es la mejor/la manera más efectiva, pero la cosa más simple de hacer. –

Respuesta

111

Cinco posibilidades para configurar un repositorio para tirar de:

  • sistema de ficheros local: git clone /path/to/repo o git clone file://path/to/repo. Menos trabajo si tiene un sistema de archivos en red, pero no un uso muy eficiente de la red. (Esto es casi exactamente solución propuesta por Joakim Elofsson)
  • protocolos HTTP: git clone http://example.com/repo. Necesita cualquier servidor web, y también necesita ejecutar (tal vez automáticamente, desde un gancho) git-update-server-info para generar la información requerida para ir y traer a través de protocolos "tontos".
  • SSH: git clone ssh://example.com/srv/git/repo o git clone example.com:/srv/git/repo. Necesita configurar el servidor SSH (daemon SSH) y tener SSH instalado en el cliente (por ejemplo, PuTTY en MS Windows).
  • git protocol: git clone git://example.com/repo. Debe ejecutar git-daemon en el servidor; ver la documentación para más detalles (puede ejecutarlo como un proceso independiente solo para recuperar, no es necesario ejecutarlo como servicio). git-daemon es parte de git.
  • paquete: Usted genera paquete en el servidor usando git-bundle comando, transferirlo a una máquina cliente de ninguna manera (incluso a través de USB), y el clon usando git clone file.bndl (si clon no funciona, se puede hacer "git init", "git remote add" y "git fetch").

Lo que hace falta en su ejemplo probablemente sea ejecutar git-daemon en el servidor. Eso, o configurar mal a git-daemon.

Lamentablemente no puedo ayudarle con la ejecución de git-daemon como servicio en MS Windows. Sin embargo, no hay nada en el anuncio de la última versión de msysGit sobre git-daemon que no funcione.

+0

Ok, entonces tengo que instalar * algo * o copiarlo sobre un paquete manualmente cada vez (posiblemente con una secuencia de comandos, supongo. ¿Las tres primeras opciones también necesitan git-daemon? – alastairs

+1

Solo se necesita ejecutar la opción "protocolo git" git-daemon en el servidor. Solo las opciones "SSH" y "HTTP" requieren herramientas adicionales: ya sea sshd (servidor ssh) o servidor web.La solución del paquete es una solución manual. –

+0

Aunque la pregunta era sobre 'extracción', se debe advertir al poster de que ejecute 'git push' después, ya que el repositorio del que está clonando no está desnudo. – yhager

15

Además de las respuestas de Jakub Narębski, hay otra forma, más en línea con su pregunta original. Se podría clonar a partir de GitHub como lo hace normalmente, a continuación, cuando se desea realizar una extracción de una sola vez de tu repositorio local, siendo de hacer esto:

git pull /path/to/repo master 

(en lugar de maestro se puede poner cualquier nombre de la sucursal.)

1

Recientemente cambié uno de mis proyectos de git para replicarlo en un servidor HTTP usando sitecopy para hacer las cargas reales de archivos.

Es bastante fácil, simplemente use git update-server-info y luego duplique el directorio .git a algún directorio accesible por http en su servidor. Usé 'project.git', que es bastante común.

Git pull de http://site/project-git funciona como un campeón, y no tengo que tener nada en el servidor, excepto el acceso FTP, aunque sitecopy también es compatible con webdav.

No recomiendo usar sitecopy, sin embargo, ya que no mantiene bien varias máquinas sincronizadas. Para mi proyecto, el repositorio HTTP es de solo lectura, y las actualizaciones de oro provienen de una sola máquina, por lo que funciona lo suficientemente bien.

0

Si el host remoto está en la misma red de Windows, es decir, se puede acceder a él como \ remotehost, a continuación, puede asignar la unidad de red en el Explorador de, digamos z: -> \ remotehost \ repodir, después de que se puede utilizar 'git clone/z/miproyecto' para clonar proyecto

1

Si usted tiene un camino como

C:\Project\ 

y lo hizo git init ya, por lo que también tiene una carpeta

C:\Project\.git\ 

Ahora crea una nueva carpeta

C:\.git\ 

entrar en esa carpeta y ejecutar git clone --bare ..\Project (desnuda es importante),
a volver a su carpeta de C:\Project\ y hacer un git remote add-url local ..\.git\Project.
Ahora simplemente haz git add -A, git commit -m "HelloWorld" y git push local master.

Usted puede compartir la carpeta Project, conectarlo a Z: y hacer git clone Z:\Project - se puede utilizar ahora git pull origin master y git push origin master para empujar/tirar de cambios de un ordenador a otro.

Cuestiones relacionadas