Pregunta

Necesito mantener mis árboles de desarrollo sincronizados en equipos diferentes, sin conexión de red entre ellos.

Tenemos un repositorio central git, y normalmente funciona en mi propio clon en mi ordenador de la oficina. A veces tengo que hacer algo de desarrollo en otro equipo, que no está conectado a la red de la oficina. Ninguno de los ordenadores son cada vez conectado a Internet. El desarrollo puede realizarse en ambos equipos entre sincronizaciones.

He leído las páginas de ayuda de git-paquete, que parece ser la mejor herramienta, pero realmente no estoy seguro de cómo un flujo de trabajo bien podría establecerse.

¿Me puede dar un consejo o punteros?

¿Fue útil?

Solución

Paquetes!

El flujo de trabajo con el paquete git va a ser esencialmente el mismo que cualquier otro flujo de trabajo. Esto puede no parecer un consejo terriblemente útil, pero aquí está:. Usar cualquier flujo de trabajo que normalmente se utiliza, y reemplazar "push / pull" con "llevar un paquete de aquí para allá en una unidad flash, a continuación, tire"

La página del manual en realidad tiene un tutorial bastante buena para conseguir llegar con esto, aunque es más de un ejemplo de una sola vía. En aras de la exhaustividad, aquí es una versión ligeramente modificada del mismo, que muestra cómo mover la información en ambos sentidos:

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

La clave a notar es que se puede añadir un paquete como un control remoto, e interactuar con él como lo haría con cualquier otro remoto. Para que la actualización remota, simplemente introduce en un nuevo paquete, en sustitución de la anterior.

También he tomado un enfoque ligeramente diferente a recoger una base. La página del manual utiliza etiquetas, siempre se mantiene al día con las últimas referencias que fueron transferidos a otro huésped. He usado simplemente las ramas remotas, lo que se refiere a los últimos árbitros transferidos de el otro host. Es un poco ineficiente; que va a terminar la agrupación de más de lo necesario, ya que es una detrás de paso. Sin embargo, las unidades flash son grandes, los paquetes son pequeñas, y el uso de los árbitros que ya tienen en lugar de tener que dar un paso más y tener cuidado con las etiquetas ahorra mucho esfuerzo.

La única cosa que hace manojos un poco de problemas es que no se puede empujar a ellos, y no se puede "rebase" de ellos. Si desea que el paquete basado en una nueva base, que tiene que volver a crearlo. Si desea que las nuevas confirmaciones en el mismo, usted tiene que volver a crearlo. Esto da lugar a problemas de mi siguiente sugerencia ...

Repo en una unidad flash

En serio, a menos que su repo es muy grande, esto podría ser igual de fácil. Ponga un clon desnuda en una unidad flash, y se puede empujar y tirar a la de ella de ambos equipos. Tratarla como su conexión de red. Necesidad de transferir al repositorio central? Conecte todo!

Otros consejos

@ Jefromi respuesta fue gran -. 10 veces mejor que la documentación Git, que van en largo y tendido sobre los requisitos y acciones incomprensibles

Es todavía un poco complicado, así que aquí está el caso más simple sincronización de una vez (en mi caso: de: un ordenador portátil en línea con tarjeta wifi roto, A: un escritorio con acceso a Internet). Sobre la base de la respuesta de @ Jefromi, esto parece muy bien el trabajo:

A CONTINUACIÓN = máquina que está por delante por algún número de confirmaciones. DETRÁS = máquina que desea copiar la compromete a

1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

Ambos: copia myBundleName.bundle (utilizando el correo electrónico, USB, lo que sea)

ATRÁS: (lugar del archivo myBundName.bundle cualquier lugar que desee fuera la carpeta del proyecto)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

Así que siempre y cuando incluya el nombre-sucursal en el extremo (por defecto, si no se está usando ramas, "maestro"), esto parece muy bien el trabajo, y no sustituye a ninguna de las referencias internas detrás -. por lo que todavía puede sincronización a / desde el maestro de origen

es decir. si detrás de tiene acceso a Internet, aún así es seguro hacerlo:

(OPTIONAL) 4. BEHIND: git push

... y va a actualizar el repositorio principal, como si los cambios se han hecho a nivel local, como de costumbre, detrás.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top