¿Cómo filtrar files particulares para el lanzamiento de un repository de git?

Por favor, es posible crear una twig independiente en el repository git de desarrollo que contendría solo files específicos para una versión sin testings de regresión, por ejemplo? ¿Cómo?

Por ejemplo, quiero crear esta twig que contenga solo el command perl y llevarlo al repository de git en /usr/local/bin . La fusión con la twig maestra allí sería la implementación con una pista de historial (cambio y liberación) pero sin el historial de desarrollo de testings, etc.

Leí Git: Transferir files e historias específicos de un repository a otro, pero no quiero crear un nuevo repository completo con filter-branch . Preferiría crear solo una twig de publicación con todo el historial, pero despojada del file en particular. Digamos una combinación de git log --file y git filter-branch .

La gestión de lanzamientos debe estar separada del desarrollo.

  • el desarrollo se gestiona en su herramienta de control de versiones (aquí git), con files adicionales (como sus files de testing)
  • release es un process que toma un package (en su caso, todos los files excepto los de testing) y los implementa (aquí copy simple a / usr / local / bin)

No debería necesitar ajustar el historial de su repository para representar el "package" (set de files que se desplegarán en un entorno objective).
Debe enviar su repository a un repository simple en el server (el entorno de destino) y dejar que un enganche posterior a la recepción se encargue de la implementación (la copy de los files correctos en /usr/local/bin )

Encontré una solución técnica a mi pregunta original, pero la respuesta de VonC sobre la administración de versiones es más correcta.

 set -e git filter-branch --prune-empty --index-filter ' git ls-tree -z -r --name-only --full-tree $GIT_COMMIT \ | grep -v "^\(some_file_regexp\|another_file_regexp\)$" \ | xargs -0 -r git rm -q --cached -r --ignore-unmatch' git checkout -b release git checkout master git reset --hard refs/original/refs/heads/master rm -r .git/refs/original 

¿Hay una solución técnica más elegante?