2012-03-07 27 views
38

Me gustaría exportar desde el repositorio remoto de github, no clonándolo. Similar a la exportación svn, no quiero obtener la carpeta .git con ella. Puedo solucionarlo clonando y eliminando la carpeta .git. Me pregunto si hay una manera más limpia?git export desde el repositorio remoto de github

Lo leí en algún lugar donde puedes usar git archive para lograrlo.

Sin embargo me dieron los siguientes errores ..

$ git archive --format=tar [email protected]:xxx/yyy.git master | tar -xf - 

Invalid command: 'git-upload-archive 'xxx/yyy.git'' 
You appear to be using ssh to clone a git:// URL. 
Make sure your core.gitProxy config option and the 
GIT_PROXY_COMMAND environment variable are NOT set. 
fatal: The remote end hung up unexpectedly 

Cualquier ayuda sería grande. Gracias.

Respuesta

6

Si su objetivo es limitar la cantidad de información intercambiada con el servidor, ¿ha considerado usar clone con --depth? A pesar de ello tenga que quitar la (muy reducida) .git subdirectorio sin embargo:

git clone --depth=1 [email protected]:xxx/yyy.git && rm -rf yyy/.git 
+0

Buena idea. Sería mejor si pudiera simplemente 'exportarlo' :) –

+0

Si estás en zsh puedes hacer esto: https://gist.github.com/johnhamelink/5434938 –

-4

para una exportación normales:

$ git archive master | tar -x -C /path/to/destination 

Para un archivo postal:

$ git archive --format zip --output /path/to/destination/file.zip master 

Por supuesto, para que esto funcione, primero tendrá que clonarlo localmente, no hay limpia forma de evitar eso.

+0

@AdrianGunawan No podrás exportar es _directly_ de GitHub, primero debe clonarlo localmente. Después de clonarlo localmente, 'maestro' se refiere al nombre de la rama. –

+2

Downvoted por ignorar el quid de la cuestión tal como está establecido y titulado. – danorton

7

Si solo está interesado en exportar desde GitHub, entonces proporciona un mecanismo para descargar tarballs. Por ejemplo:

https://github.com/torvalds/linux/downloads

A pesar de que dice que "no hay ningún tipo de descarga de este repositorio." aún puede usar los botones para descargar un tarball de la rama principal.

O vea este enlace para obtener una lista de archivos tar vinculados con las etiquetas:

https://github.com/torvalds/linux/tags

Esto debería funcionar para cualquier cesión temporal GitHub, no sólo el núcleo de Linux.

+1

Sería útil si funciona para cualquier repositorio git, no solo github. –

3

Si necesita este para las confirmaciones con nombre (es decir las ramas y etiquetas), entonces se puede utilizar git clone --depth=1 combinado con git archive

Vale la pena saber que git clone --depth=1 clones todos los principales compromete en todas las ramas y las etiquetas (no solo master). Entonces, después de hacer un clon tan superficial, puede ingresar al directorio local y hacer un git archive --format=tar tag_to_be_exported.

lo tanto, si desea exportar la etiqueta release1.1

git clone --depth=1 [email protected]:xxx/yyy.git 
cd yyy 
git archive --format=tar release1.1 -o release1.1.tar 

Así unnless necesita exportar sin nombre cometer-ids, esto puede ser una buena solución.

+1

Es interesante que menciones el tema "Todas las ramas y etiquetas". De hecho, uno podría querer exportar una sucursal ligera en un repositorio de otro modo enorme. Sin embargo, en mi git (1.9.1) 'man git-clone' tiene la opción' - [no-] single-branch' "Clona solo el historial que lleva a la punta de una sola rama" y "Al crear un clon superficial con la opción --depth, esta es la predeterminada, a menos que --no-single-branch se dé para buscar los historiales cerca de las puntas de todas las ramas. " –

+0

@ StéphaneGourichon Sí, los valores predeterminados han cambiado desde que se publicó esta respuesta: http://stackoverflow.com/a/9920956/239408 – xverges

50

Gracias al apoyo de Subversion por GitHub, puede utilizar svn export para que el proyecto sin ningún tipo de archivos de control de versiones:

svn export https://github.com/user/project/trunk 

Observe el formato de URL:

  • La URL base es https://github.com/
  • USERNAME/PROJECTNAME sin .git
  • /trunk se adjunta al final

De esta manera se puede obtener ramas y subdirectorios también.

Esto crea un directorio con los archivos exportados. No es posible crear un tar/zip directamente, tienes que hacerlo en dos pasos (exportar + zip). Esta es una limitación de svn export.

Como @Jon señaló, esto creará la exportación en un directorio llamado trunk de forma predeterminada. Puede especificar un nombre diferente si lo prefiere:

svn export https://github.com/username/projectname/trunk projectname 

Puede utilizar esta técnica para exportar cualquier subdirectorio del proyecto. Por ejemplo, si desea que sólo some/path, que puede hacer:

svn export https://github.com/username/projectname/trunk/some/path local-dir-name 

Puede obtener trayectorias de las ramas y etiquetas también. El punto final https://github.com/username/projectname se comporta como un repositorio de Subversion con un diseño regular, por lo que encontrará ramas en https://github.com/username/projectname/branches y etiquetas en https://github.com/username/projectname/tags.

Antes de exportar algo grande por error, es bueno verificar primero el contenido de la ruta. Puede hacer que el uso de svn ls, por ejemplo:

svn ls https://github.com/username/projectname/ 

Normalmente esto debe darle:

branches/ 
tags/ 
trunk/ 

Se podría explorar de forma iterativa el repositorio de esta manera.

+0

Esto funciona como un encanto –

+3

EXCELENTE solución. Una cosa a tener en cuenta es que esto creará un directorio raíz llamado 'trunk' de forma predeterminada. Para evitar eso, simplemente especifique un nombre alternativo, como este: 'svn export https: // github.com/username/projectname/trunk projectname' – Jon

+1

Gracias @Jon, ¡agregué su nota a mi respuesta! – janos

1

Me encontré con este mismo problema antes, y AFAICT, parece que solo funciona con Bitbucket, p.

ysim:~/repos$ git archive --format=tar --prefix=alembic/ --remote=ssh://[email protected]/zzzeek/alembic.git master | tar -xf - 
ysim:~/repos$ ls 
alembic 

Pero he encontrado una solución para GitHub usando wget - por lo que en la nueva interfaz de GitHub, encontrará un botón que dice "Descargar postal" en la parte inferior de la barra lateral derecha; haga clic derecho sobre él y copie la dirección del enlace.

Download ZIP

A continuación, en la línea de comandos (que tuvo la idea de here):

wget -qO- -O tmp.zip <zipball url> && unzip tmp.zip && rm tmp.zip 

Eso será descomprimirlo en un directorio llamado algo así como repo-master/.

Si lo desea, también puede alias esto en su .gitconfig para que no tenga que recordar/escribir todo eso, p.

export = "! f() { wget -qO- -O tmp.zip \"$1\" && unzip tmp.zip && rm tmp.zip; }; f" 

lo que sólo puede hacer algo como esto en la cáscara:

ysim:~/repos$ git export https://github.com/ysim/verbinski/archive/master.zip 
ysim:~/repos$ ls 
verbinski-master 
0

Una forma de lograr esto es utilizar el apoyo ofrecido por SVN GIT.

Los pasos para realizar como root one off son (para Cent os);

yum install git 

yum install subversion 

Luego de realizar una exportación selectiva la siguiente sintaxis debe utilizarse:

svn export <git repository>/<source folder> <empty target folder> --no-auth-cache --force --username <active directory username> 

Si no se utiliza el parámetro --no-auth-cache cuando se le pida para guardar el tipo de contraseña "no" por razones de seguridad, o se guardará sin cifrar.

Al traducir de la notación GIT a la notación SVN se aplica la siguiente asignación; reemplazar "árbol/maestro" con "tronco" para el amo reemplazar "árbol/branch_name" con "ramas/branch_name" para las sucursales

Esto funciona tanto para los archivos y directorios.

3

Por razones desconocidas (al menos a mí) GitHub doesn't support this.

We don’t support people running git-archive against our servers. 

parece tonto, ya que a través de SVN se puede, pero ... Me upvoted @Janos' answer.

Cuestiones relacionadas