Escribir extensión GIT Permitir que los files en diferentes twigs / cabezas coexistan en el mismo directory

En una pregunta anterior , pregunté si alguien ya había escrito un guión para permitir mezclar files de múltiples twigs (o incluso repositorys) en el mismo directory para que todos se comprometieran / tiraran / etc. de sus orígenes apropiados.

Por favor, vea esa publicación por razones de por qué este no es un caso en el que dividir en repositorys separados o arreglos de sucursales funcionaría antes de objetar.

La respuesta a esa pregunta parece ser que tal script no existe. Mi pregunta ahora es cuál es la mejor manera de escribir el guión.

1) La manera fácil. Envuelva un script simple de Perl que verifique múltiples twigs detrás de las escenas y mantenga un logging de qué file pertenece a cada twig y simplemente copie los files de nuevo y ejecute los commands de git detrás de las escenas.

2) Si es posible (no sé), algún tipo de uso elegante de los commands de bajo nivel de git para hacer esto directamente sin tener ningún pago. es posible?

3) Algún tipo de interfaz de bajo nivel en el código git.

El problema obvio con 2 es el desperdicio de resources con todas las cajas ocultas y la fealdad de todo, pero no sé lo suficiente sobre 2 o 3 para saber si son razonablemente posibles.

Supongo que mi pregunta principal es si hay commands de bajo nivel de git para verificar los files en una twig sin crear un checkout y verificarlos en directorys aleatorios. De ser así, podría utilizar estos commands para trabajar directamente con los files en mi directory de múltiples sucursales y evitar en forma automática los controles secretos.

Este capítulo del Libro comunitario de Git puede ser de su interés para la interacción de Git de bajo nivel.

Para parafrasearlo,

  1. Crea blobs de tus files con git hash-object .
  2. Crea un tree de tus blobs con git mktree .
  3. Crea una confirmación para ese tree con git commit-tree .
  4. Actualice una twig para apuntar a esa confirmación con git update-ref .

Esto es, en esencia, lo que hace git-subtree (es un set simple de scripts), pero no es trivial en el caso de mover files entre los límites. Hay muchas cosas con las que no trata de ayudar, pero podría ser suficiente si su caso de uso es lo suficientemente simple o bien disciplinado.