git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id
git diff-tree -r $commit_id
:
Tome una diferencia de la confirmación dada a su padre (s) (incluidos todos los subdirectorios, no solo el directorio superior).
--no-commit-id --name-only
:
No genere la confirmación SHA1. Genere solo los nombres de los archivos afectados en lugar de una diferencia completa.
--diff-filter=ACMRT
:
Solo muestre los archivos agregados, copiados, modificados, renombrados o cuyo tipo haya cambiado (por ejemplo, archivo → enlace simbólico) en esta confirmación. Esto deja fuera los archivos eliminados.
ACTUALIZAR A PARTIR DEL COMENTARIO:
Basado en el contexto de la pregunta y los comentarios a continuación, con el siguiente comando, puede obtener los ACMRT
archivos como un .tar
archivo con su estructura de carpetas.
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -
Solo para redondear esto, aquí está el comando canalizado a tar. Esto exporta los archivos a un archivo tar.
fuente
Aquí hay un comando de una línea que funciona en Windows 7. Ejecútelo desde la carpeta de nivel superior de su repositorio.
fuente
si su hash de confirmación es, por ejemplo, a9359f9, este comando:
git archive -o patch.zip a9359f9 $(git diff --name-only a9359f9^..a9359f9)
extraerá los archivos modificados en la confirmación y los colocará en patch.zip manteniendo intacta la estructura del directorio del proyecto.
un poco detallado, el hash de confirmación se menciona tres veces, pero parece funcionar para mí.
lo tengo aquí: http://tosbourn.com/2011/05/git/using-git-to-create-an-archive-of-changed-files/
fuente
function
en PowerShell para reducir el comando a solo un nombre de función y usar$args
para pasar el hash de confirmación solo una vez. En * nix, probablemente pueda usar shell-scripting para lograr el mismo efecto.git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1 commit2)
. La confirmación pasada alarchive
comando puede ser cualquier confirmación arbitraria (lo más probable es que sea HEAD o la confirmación posterior) , y los archivos se extraen como si estuvieran extraídos en esa etapa de confirmación. El commit1 y el commit2 pasadosdiff
solo se utilizan para generar la lista de archivos para extraer; no afectan la versión de los archivos extraídos.diff
comando con un punto y coma:git archive -o patch.zip HEAD /**or a commit**/ $(git diff --name-only commit1A commit1B; git diff --name-only commit2A commit2B; git diff --name-only commit3A commit3B)
git diff -z --name-only commit1 commit2 | xargs -0 git archive -o patch.zip HEAD
Puede exportar diff usando Tortoise Git a MS Windows:
Hago clic derecho y selecciono TortoiseGit > Mostrar registro y los mensajes de registro se abrirán.
Seleccione dos revisiones y compárelas. La diferencia entre estará abierta.
Seleccione los archivos y Exportar selección a ... ¡ a una carpeta!
fuente
Necesitaba actualizar mi servidor de prueba y agregar archivos que cambiaron desde la versión 2.1.
Para mí funcionó una solución similar a la que publicó James Ehly, pero en mi caso quería exportar al paquete de archivo de la diferencia entre dos etiquetas más antiguas: tag_ver_2.1 y tag_ver_2.2, no la única confirmación.
Por ejemplo:
tag_ver_2.1 = 1f72b38ad
tag_ver_2.2 = c1a546782
aquí hay un ejemplo modificado:
fuente
Los siguientes comandos funcionaron para mí.
Si desea que la diferencia de los archivos cambie con la última confirmación:
o si quieres diferencia entre dos confirmaciones específicas:
o si tiene archivos no confirmados, recuerde que la forma de git es confirmar todo, las ramas son baratas:
fuente
He creado un script php para exportar archivos modificados en Windows. Si tiene un servidor de desarrollo localhost con php configurado, puede ejecutarlo fácilmente. Recordará su último repositorio y exportará siempre a la misma carpeta. La carpeta de exportación siempre se vacía antes de exportar. También verá los archivos eliminados en rojo para que sepa qué eliminar en el servidor.
Estos son solo dos archivos, así que los publicaré aquí. Supongamos que sus repositorios están ubicados en c: / www en sus propias carpetas y que http: // localhost también apunta a c: / www y está habilitado para php. Pongamos estos 2 archivos en c: / www / git-export -
index.php:
git-export.ini:
Y ahora cargue localhost / git-export / en un navegador. El script está configurado para exportar siempre a c: / www / export: cambie todas las rutas para que se adapten a su entorno o modifique el script para satisfacer sus necesidades.
Esto funcionará si tiene Git instalado para que el comando git esté en su RUTA; esto se puede configurar cuando ejecuta el instalador de Windows Git.
fuente
Para exportar archivos modificados que comienzan con una fecha:
Atajo (use alias)
Alias en .gitconfig
fuente
Aquí hay un pequeño script bash (Unix) que escribí que copiará archivos para un hash de confirmación dado con la estructura de carpetas:
Cree un archivo llamado '~ / Scripts / copy-commit.sh' y luego dele privilegios de ejecución:
Luego, desde la raíz del repositorio de git:
fuente
También enfrenté un problema similar antes. Escribí un sencillo script de Shell.
El comando anterior mostrará Commit Hash (Revisión) de commit_HashX a commit_HashY en orden inverso.
Ahora el script de Shell principal usando el comando anterior.
Agregue este código a export_changes.sh. Ahora pase el archivo y confirme los hashes al script.
Asegúrese de que el commit_hash inicial debe ser el primer argumento y luego el último commit_hash hasta el que desea exportar los cambios.
Ejemplo:
$ sh export_changes.sh hashX hashY
Coloque este script en el directorio local de git o establezca la ruta del directorio local de git en el script. Espero eso ayude..!
fuente
Esto me funciona tanto para Unix como para Windows:
Hay dos marcadores de posición en el comando. Debe reemplazarlos para su propósito:
__1__ : reemplace con la identificación de confirmación de la confirmación justo antes de todas las confirmaciones que desea exportar (por ejemplo, 997cc7b6 - no olvide mantener ese punto doble después de la identificación de confirmación - esto significa "involucrar todas las confirmaciones más nuevas que esta confirmación")
__2__ : reemplace con la ruta existente donde desea exportar sus archivos (por ejemplo, ../export_path/)
Como resultado, obtendrá sus archivos en una estructura de carpetas (sin zips / tars ...), ya que alguien podría estar acostumbrado a usar exportaciones de svn de tortuga en repositorios de svn.
Esto es, por ejemplo, bastante útil cuando desea realizar una implementación manual de archivos agregados / modificados de algunas últimas confirmaciones. Entonces puede simplemente copiar estos archivos a través del cliente ftp.
fuente