¿Cómo puedo hacer que mi repositorio local esté disponible para git-pull?

89

Tengo un repositorio de copias de trabajo en el que he estado trabajando sin problemas; el origen de este repositorio está en GitHub.

Me gustaría que mi repositorio de copias de trabajo esté disponible como el origen de mi máquina de compilación (una VM en otro host físico), de modo que las confirmaciones que hago en mi copia de trabajo se puedan compilar y probar en la máquina de compilación sin tener que pasar por Primero GitHub. Ya tengo una compilación para el repositorio de GitHub, pero me gustaría que fuera un repositorio / compilación "dorado"; es decir, si algo entra allí, se debe garantizar que la compilación contra GitHub pase.

He mirado la documentación sobre 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/(ver, por ejemplo, la documentación de git-clone ). Quiero hacer esto de la manera más simple posible, con la mínima configuración: no quiero tener que configurar un demonio SSH o un 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. Suponga 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 probando el siguiente comando en la máquina de compilación, con el resultado asociado:

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 de algo?

alastairs
fuente
¿No puede simplemente configurar un recurso compartido localmente y luego hacer 'git clone \\ workmachine \ share' desde su buildmachine? No es la mejor ni la más eficaz forma, pero sí lo más sencillo de hacer.
Joakim Elofsson

Respuestas:

133

Existen cinco posibilidades para configurar un repositorio para extraer de:

  • sistema de archivos local : git clone /path/to/repoo git clone file://path/to/repo. Trabaje menos si tiene un sistema de archivos en red, pero no hace un uso muy eficiente de la red. (Esta es casi exactamente la solución propuesta por Joakim Elofsson )
  • HTTP protocolos : git clone http://example.com/repo. Necesita cualquier servidor web, y también necesita ejecutar (quizás automáticamente, desde un gancho) git-update-server-info para generar la información necesaria para buscar / extraer a través de protocolos "tontos".
  • SSH : git clone ssh://example.com/srv/git/repoo git clone example.com:/srv/git/repo. Debe configurar el servidor SSH (demonio SSH) y tener SSH instalado en el cliente (por ejemplo, PuTTY en MS Windows).
  • protocolo git : git clone git://example.com/repo. Necesita ejecutar git-daemon en el servidor; consulte la documentación para obtener 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 el paquete en el servidor usando el comando git-bundle , lo transfiere a una máquina cliente de cualquier manera (incluso a través de USB) y lo clona usando git clone file.bndl(si clonar no funciona, puede hacer "git init", "git remote add "y" git fetch ").

Lo que le falta en su ejemplo es probablemente ejecutar git-daemon en el servidor. Eso, o configurar mal git-daemon.

Desafortunadamente, no puedo ayudarlo a ejecutar 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 funciona.

Jakub Narębski
fuente
Ok, entonces necesito instalar algo o copiarlo en un paquete manualmente cada vez (posiblemente escribiéndolo a través de, supongo. ¿Las primeras tres opciones también necesitan git-daemon?
alastairs
1
Solo la opción "protocolo git" necesita ejecutar git-daemon en el servidor. Solo las opciones "SSH" y "HTTP" requieren herramientas adicionales: sshd (servidor ssh) o servidor web. La solución de paquete es una solución manual.
Jakub Narębski
Aunque la pregunta era sobre 'pull', se debe advertir al cartel que no ejecute 'git push' después, ya que el repositorio desde el que está clonando no está vacío.
yhager
Por favor, ¿podrías dar más detalles sobre esto, @yhager?
alastairs
1
Nota para cualquier otra persona que pruebe la opción del sistema de archivos local: ¡recuerde escapar de las barras invertidas iniciales en la ruta UNC! :-)
alastairs
17

Además de las respuestas de Jakub Narębski, hay otra forma, más acorde con su pregunta original. Puede clonar desde github como lo hace habitualmente, luego, cuando desee realizar una extracción única de su repositorio local, simplemente haga esto:

git pull /path/to/repo master

(en lugar de master puede poner cualquier nombre de rama).

Vaina
fuente
Un pequeño consejo (o cómo llegué a esta pregunta): ..en <path / to / repo> no parece funcionar; use una ruta completa en su lugar.
Dmitry Timofeev
1

Recientemente cambié uno de mis proyectos de git para replicarse a sí mismo en un servidor HTTP usando sitecopy para realizar las cargas de archivos reales.

Es bastante fácil, solo use y git update-server-infoluego refleje el directorio .git en algún directorio accesible por http en su servidor. Usé 'project.git', que es bastante común.

Git pull from 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.

Sin embargo, no recomiendo usar sitecopy, ya que no mantiene bien sincronizadas varias máquinas. 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.

davenpcj
fuente
1

Si tienes un camino como

C:\Project\

y ya lo hiciste git init, así que también tienes una carpeta

C:\Project\.git\

Ahora crea una nueva carpeta

C:\.git\

Vaya a esa carpeta y ejecute git clone --bare ..\Project(lo básico es importante),
vuelva a su C:\Project\carpeta y haga un git remote add-url local ..\.git\Project.
Ahora que acaba de hacer git add -A, git commit -m "HelloWorld"y git push local master.

Puede compartir la Projectcarpeta, conectarla Z:y hacerlo git clone Z:\Project; puede usar ahora git pull origin mastery git push origin masterpara enviar / extraer cambios de una computadora a otra.

metadings
fuente
0

Si su host remoto está en la misma red de Windows, es decir, puede acceder a él como \ remotehost, entonces puede mapear la unidad de red en el explorador, digamos z: -> \ remotehost \ repodir, luego puede usar 'git clone / z / myproject 'para clonar el proyecto

jnr
fuente