2183 votos

Cómo hacer un "git export" (como "svn export")?

Me he estado preguntando si existe una buena "git" exportar " la solución que crea una copia de un árbol sin la .git directorio del repositorio. Existen al menos tres métodos sé de:

  1. git clone seguido por la eliminación de la .git directorio del repositorio.
  2. git checkout-index alude a esta funcionalidad pero empieza con "Acabo de leer el deseado árbol en el índice...", que no estoy del todo seguro de cómo hacerlo.
  3. git-export de una tercera parte de secuencia de comandos que hace esencialmente un git clone en una ubicación temporal seguida rsync --exclude='.git' en el destino final.

Ninguna de estas soluciones realmente me parecen ser satisfactorios. El más cercano a svn export podría ser la opción 1, debido a que tanto aquellos que requieren que el directorio de destino para estar vacía primero. Pero la opción 2 parece incluso mejor, suponiendo que yo pueda entender lo que significa leer un árbol en el índice.

2214voto

Charles Bailey Puntos 244082

Probablemente la forma más sencilla de lograr esto es con git archive. Si usted realmente necesita sólo el árbol expandido puede hacer algo como esto.

git archive master | tar -x -C /somewhere/else

La mayoría del tiempo que necesito para 'exportar' algo de git, quiero un archivo comprimido en cualquier caso, así que hacer algo como esto.

git archive master | bzip2 >source-tree.tar.bz2

Archivo ZIP:

git archive --format zip --output /full/path/to/zipfile.zip master 

git help archive para más detalles, es bastante flexible.

304voto

Greg Hewgill Puntos 356191

Me enteré de lo de la opción 2 medios. Desde un repositorio, usted puede hacer:

git checkout-index -a -f --prefix=/destination/path/

La barra al final de la ruta de acceso es importante, de lo contrario se dará como resultado los archivos están en /destino con un prefijo de " ruta".

Ya que en una situación normal el índice contiene el contenido del repositorio, no hay nada especial que hacer para "leer el deseado árbol en el índice". Ya está.

La -a indicador es requerido para desproteger todos los archivos en el índice (no estoy seguro de lo que significa omitir este parámetro en esta situación, ya que no hace lo que yo quiero). La -f bandera de las fuerzas de sobrescribir cualquier archivo existente en la salida, que este comando no haría normalmente.

Este parece ser el tipo de "git exportación" yo estaba buscando.

242voto

Aleksandr Somov Puntos 1700

git archive también trabaja con el repositorio remoto.

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master | tar -xf -

Para exportar camino particular dentro de la repo añadir tantos caminos como te deseo como último argumento de git, por ej.:

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master path1/ path2/ | tar -xv

37voto

Daniel Schierbeck Puntos 962

He escrito un simple envoltorio alrededor git-checkout-index que se puede utilizar como esta:

git export ~/the/destination/dir

Si el directorio de destino ya existe, usted tendrá que agregar -f o --force.

La instalación es sencilla; basta con colocar el script en algún lugar de su PATH, y asegurarse de que es ejecutable.

El repositorio de github para git-export

35voto

kostmo Puntos 2265

Parece que este es un problema menor con Git de SVN. Git sólo pone un directorio .git en la raíz del repositorio, mientras que SVN pone un .svn carpeta en cada subdirectorio. Así que "svn export" evita recursiva de la línea de comandos de la magia, mientras que con Git recursividad no es necesario.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X