2012-08-09 30 views
19

Necesito exportar un contenido de repositorio git e importarlo en un repositorio de destino. Sé de dos alternativas para hacerlo, pero no resuelven mi problemaExportar git con el historial de versiones

a) Agregue el repositorio de origen como control remoto y realice una combinación con el destino. No puedo usar esto ya que ambos repositorios no están en la misma red

b) Use git archive y copie los contenidos al destino. En este archivo git, la información de revisión se pierde.

Necesito algo que haga un archivo junto con el historial de versiones y me permite unirme al objetivo. ¿Cómo puede hacerse esto?

Respuesta

40

git bundle se proporciona para este propósito exacto.

Ejemplo:

  1. Bundle su repositorio en su totalidad

    git bundle create my_repo.bundle --all

  2. Take `` my_repo.bundle '' a donde su objetivo es

  3. Desde su destino, cargue sus objetos de commit de origen

    git bundle unbundle my_repo.bundle

    ... desde qué punto puede combinar/rebase/cereza selecciona la fuente deseada se compromete en su repositorio de destino al contenido de su corazón.

    De lo contrario, tirando de las obras de la misma manera:

    git pull my_repo.bundle

En comparación con la clonación, los paquetes son más fáciles de transferir porque son más pequeños que los archivos no se realizan en su estado desprotegido .

Otras razones para usar paquete:

  • A diferencia del uso clone --bare (que no comprobación sus archivos), lotes se crean y se empaquetan en un único archivo de modo que no es necesario compresión adicional/tarballing

  • También podría simplemente tarball el repositorio de origen (o simplemente el directorio .git ), pero se le lleva sobre todo el exceso de caché y basura que se acumula debajo de .git /.

+7

También puede 'git clone my_repo.bundle'. Para obtener más información en http://git-scm.com/docs/git-bundle – jpbochi

+0

antes de desagregar, necesita tener un repositorio de destino existente o crear un nuevo repositorio por mandato de git init, ya que de lo contrario, obtendría un error. –

+0

@LinSongYang El nuevo repositorio también se puede crear clonando del paquete de la forma en que describe el primer comentario. – antak

0

Parece que desea crear una bifurcación de su depósito actual. Avíseme si tengo este derecho: Usted desea clonar un repositorio de git en particular. ¿Trabajar en el clon y luego fusionar los cambios en el repositorio original?

Esto se hace al crear un tenedor de su repositorio y luego extraer los cambios de la fuente original para confirmar los cambios.

+0

No se puede acceder directamente al repositorio de origen. (Entonces no se puede fusionar/clonar) ¿Hay algún otro mecanismo de entrega para mover los cambios a través de dos repositorios desconectados? – codejammer

+0

Si no se puede acceder al directorio de origen, ¿cómo piensa copiar cualquier archivo de él? – darnir

+0

Tiene que ser distribuido sin acceso directo – codejammer

0

Puede comprimir la carpeta del repositorio completa, luego copiarla en la estación de trabajo de destino (mediante un dispositivo USB, etc.) y agregar ese repositorio local como repositorio remoto. Luego puedes buscar y fusionar.

+0

FYI: Esto a menudo está bien, pero tiene un inconveniente importante: está transfiriendo no solo los datos y el historial, sino también todas las configuraciones como remotos urls o hooks o directorio de trabajo nombre de usuario y correo electrónico, que es algo que no quieres hacer – quetzalcoatl

2

Git clone el repositorio en una memoria USB, computadora portátil u otro medio de transferencia de datos. Enganche eso a la otra máquina, agregue agregue el medio como control remoto y extraiga/combine los cambios a partir de allí ...

Cualquier clon del repositorio en realidad contiene todo el historial, por lo que la pregunta es ¿cómo puede obtener realmente? un clon a la otra máquina.

Véase también: this question

+0

Entonces, tenemos que clonar y luego usar nuestro propio mecanismo de archivo porque git archive se salta la carpeta .git ¿verdad? – codejammer

+0

Sí, básicamente git-archive puede crear un zip/tarball de una revisión específica y/o parte del árbol, pero no conserva el historial. –

+0

Gracias, este enfoque funciona para mí – codejammer

Cuestiones relacionadas