¿Puede cometer Git "versiones vacías" de nuevos files?

¿Puede GIT cometer versiones vacías de algunos files? El caso es que necesito que los files nuevos (sin seguimiento) se agreguen primero y se comprometan como files vacíos , a fin de marcar sus contenidos como nuevos y revisados ​​(los files completos sin seguimiento no deben agregarse al índice; git diff debe mostrar los contenidos recién agregados comparando el file con su versión vacía confirmada).

Hay git add -N file… , que coloca el file con un contenido vacío en el índice, pero esto solo dice que se agregará el file , y git commit queja de que el file no se ha agregado. Lo que sucede es que la versión actual no vacía no es lo que se debe agregar, sino solo una versión vacía del nuevo file.

¿Hay alguna forma de hacer esto?

PD: esta pregunta se realiza en el context de un progtwig que agrega automáticamente files a un repository git (mi progtwig sigue el código que escriben los estudiantes). El código no comprometido es un código que aún no he aprobado. Por lo tanto, el estado en el que se inicia un progtwig creado por un estudiante debe ser el estado vacío , aunque mi progtwig acaba de encontrar un nuevo progtwig no vacío en su directory principal; esto se maneja al comprometer automáticamente una nueva versión vacía de cualquier nuevo file de progtwig de estudiante en un repository de git. Por lo tanto, las nuevas líneas de código que escriben aparecen como contenido recién agregado, en comparación con la última revisión de git comprometida.

Para ser sincero, realmente no entiendo para qué sirve esto. Intentaría arreglar el process de revisión en lugar de estropear el historial. Pero si realmente quieres hacer esto, aquí hay varias forms de cómo:

  1. El enfoque pragmático:

     mv file out-of-way touch file git add file mv out-of-way file 
  2. El enfoque de la porcelana:

     git add -N file git add -p file 

    … y simplemente responda "no" cuando se le pregunte si debe agregarse el único trozo.

  3. El enfoque de fontanería:

    Primero, asegúrese de que exista un object vacío en la database de objects:

     git hash-object -w --stdin < /dev/null 

    Esto devolverá el SHA1 de un blob vacío (que es e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ). Tienes que crear este object solo una vez. Ahora puede crear files vacíos en el índice por

     git update-index --add --cacheinfo 0644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 file