git: zip ha cambiado los files de la confirmación especificada

Tengo el command PS, que comprime todos los files modificados de la última confirmación:

powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" HEAD $(git diff --name-only HEAD^)" 

Ahora, ¿cómo puedo comprimir otra confirmación basada en SHA, ej. 8272fa8 ?

Y cómo puedo usar este command automáticamente, ej. después de cada compromiso?

@Mark Adelsberger Tengo 2 commits:
Confirmar: 8272fa8
Fuerte: b50d426a01

Dónde:
8272fa8 tiene files:

  • index.php
  • assets / style.css
  • images / logo.png

y b50d426a01 tiene files:

  • lib / Image.php

Cuando uso:

 git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" 8272fa8 $(git diff --diff-filter=d --name-only b50d426a01^) 

Me estoy poniendo:

 fatal: pathspec 'storage/cache.php' did not match any files 

Desde el nuevo compromiso, ¿por qué?

¿Cómo puedo comprimir otra confirmación basada en SHA, ej. 8272fa8?

En su command de archive , HEAD es un valor que puede dar para <tree-ish> , es decir, qué contenido colocar en el file. La ID SHA de cualquier COMMIT también es una <tree-ish> válida, por lo tanto, reemplace HEAD con su valor SHA ID.

Y de la misma manera en su command diff HEAD^ significa "el padre se compromete con HEAD ". Siempre que su compromiso tenga un padre, puede usar su SHA en lugar de HEAD nuevamente. Entonces para cualquier cosa que no sea un commit raíz

 powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" <sha-id> $(git diff --name-only <sha-id>^)" 

Tenga en count que si la confirmación para <sha-id> es una combinación, esto lo diferenciará de su primer elemento principal (la twig en la que se fusionaron otros cambios).

Si su confirmación es una confirmación raíz, entonces el diff no tiene ningún sentido (querrá "diferir contra un tree vacío", que simplemente devolverá la sum de cada file de todos modos), por lo que simplemente dirá

 powershell "git archive -o "./../__updates/$(git log -1 --pretty=%B).zip" <sha-id>" 

Hacer que su secuencia de commands sepa la diferencia es otro aro en el que saltar, y en la mayoría de los casos, no encontrará el caso "commit de raíz" muy a menudo, por lo que puede ser más fácil archivar el commit raíz manualmente y simplemente configurar su script para asumir hay un padre (y, idealmente, para fallar con elegancia si el diff hace que salga el error).

cómo puedo usar este command automáticamente, ej. después de cada compromiso?

Tengo la sensación de que estás volcando esfuerzos en algo que luego encontrarás networkingundante, pero está bien. Puede ejecutar esto después de cada confirmación al configurar un enganche post-commit (un script en el directory .git/hooks su repository). Consulte https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks