Ignore los cambios en un file rastreado sin que sea imposible `git add` el file

Puede omitir el preámbulo.


Tengo un package npm con la siguiente estructura:

lib/index.js src/index.coffee 

El file de origen es un file de CoffeeScript. Tengo un objective para crear el file JavaScript desde el file fuente. Hasta hace poco, incluía cambios en el file JavaScript en cada confirmación, pero ahora uso xyz con un script prepublish:

 XYZ = node_modules/.bin/xyz --script scripts/prepublish .PHONY: release-major release-minor release-patch release-major: LEVEL = major release-minor: LEVEL = minor release-patch: LEVEL = patch release-major release-minor release-patch @$(XYZ) --increment $(LEVEL) 

La secuencia de commands prepublish es simple:

 #!/usr/bin/env bash set -e rm -f lib/index.js make lib/index.js git add lib/index.js 

Esto significa que cada vez que publico una nueva versión (ejecutando make release-patch , por ejemplo), lib / index.js será reconstruido y agregado a la confirmación de lanzamiento. Todo funciona bien hasta este punto.


Dado que el script de lanzamiento actualiza automáticamente el file comstackdo, ya no quiero actualizarlo manualmente cada vez que me comprometo. El problema es que después de ejecutar make test , el git status enumera lib / index.js como un file modificado y rastreado. Me gustaría evitar cometer accidentalmente este file, por lo que quiero evitar que git status en la list por git status .

Lo primero que intenté fue agregar /lib/ a .gitignore . Sin embargo, esto no funciona, ya que lib / index.js ya está siendo rastreado.

Luego descubrí git update-index --assume-unchanged . Ejecuté este command con lib/index.js como argumento, y el file ya no figura en la list por git status . Hasta aquí todo bien. Ahora bien, git add lib/index.js ya no funciona, por lo que la secuencia de commands prepublish no hará su trabajo.

Creo que el script prepublish podría ejecutar git update-index --no-assume-unchanged lib/index.js antes de git add , y luego podría revertir el bit con git update-index --assume-unchanged lib/index.js . ¿Este es realmente el mejor enfoque?

Para resumir, ¿cómo se ignoran los cambios en un file rastreado al time que se conserva la capacidad de git add el file?

Solutions Collecting From Web of "Ignore los cambios en un file rastreado sin que sea imposible `git add` el file"

Compruebe simplemente si un git add -f ( git add --force ) podría agregar el file sin la necesidad de desarmar el bit de assume-unchanged .

Si eso no funciona, entonces:

Creo que el script prepublish podría ejecutar git update-index --no-assume-unchanged lib/index.js antes de git add , y luego podría revertir el bit con git update-index --assume-unchanged lib/index.js .

Con este enfoque, es lo mejor que puedes hacer.

El único otro enfoque es git update-index --(no-)skip-worktree lib/index.js (que presento aquí ), pero en su caso, eso sería lo mismo.