2012-10-11 40 views
5

Tengo un repositorio remoto sin conexión (sin directorio de trabajo) que crea install-tars. Funciona bien Pero ahora quiero crear tars solo de los archivos modificados. Lo probé de esta manera:Archivo de git de archivos modificados en repos sin conexión

git archive --format=tar --prefix='/' HEAD `git diff V1.02 --name-only` | gzip -9 > ~/tars/update-v1.02-`git describe master --tags`.tar.gz 

Esto funciona muy bien con mi repositorio local. Crea un alquitrán con los archivos de la versión etiquetada V1.02 a la última confirmación. Pero no funciona con reposiciones simples. ¿Hay alguna otra solución?

Respuesta

1

Las dos formas de confirmación git diff funcionarán en un depósito simple (git diff [options] <commit> <commit> [--] [<path>...]).

Lo siguiente debe hacer lo que yo entiendo que desee:

git archive --format=tar --prefix='/' master `git diff V1.02 master --name-only` | gzip -9 > ~/tars/update-v1.02-`git describe master --tags`.tar.gz 

También sugiero cambiar el HEAD desde el mandato original de master (como se muestra arriba) para ser coherente con el resto de la orden, y ser resistente si alguien cambia a qué rama apunta HEAD (reemplazando alternativamente todas las ocurrencias de master con HEAD en el ejemplo anterior).

+0

Hola Jacob, gracias por tu respuesta. Lástima que no recibí una notificación de stackoverflow. –

+0

Cuando pruebo tu comando, git me da lo siguiente: 'fatal: argumento ambiguo 'V1.02': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones ' ¿Dónde debo poner el' - '? 'git archive --format = tar --prefix = '/' master' git diff V1.02 - master --name-only' | gzip -9> ../tar.tar.gz fatal: mala revisión 'V1.02'' –

+0

'--', si se utiliza, va después de todas las opciones que no son de ruta. En su ejemplo, no lo usaría en absoluto ya que no está utilizando ninguna forma de limitación de ruta con 'git diff'. –

Cuestiones relacionadas