git symlink git-index

git asumir sin cambios frente a saltar worktree-ignorando un enlace simbólico



symlink git-index (1)

Tengo problemas con un repositorio git y windows. El problema es que el repositorio de git tiene un enlace simbólico de Linux y con los desarrolladores que ejecutan Windows, eso obviamente no funciona. Ahora, ya que el enlace simbólico nunca debería cambiar, quiero encontrar una manera de eliminar eso en los desarrolladores y agregar una carpeta en su lugar (que es a lo que apunta el símbolo) pero hacer que git ignore esos cambios particulares. Ahora puedo eliminar los enlaces simbólicos, crear una carpeta con el mismo nombre y simplemente agregar un .gitignore que ignora todo. Ahora, en cuanto a asegurarme de que git ignore la eliminación del enlace simbólico, he encontrado dos posibles soluciones mientras investigaba. Las soluciones que encontré son:

git update-index --assume-unchanged [FILE] git update-index --skip-worktree [FILE]

Mi pregunta es ¿qué opción funcionaría mejor? Quiero asegurarme de que, una vez que haga esto, nunca se deshaga a menos que lo haga específicamente. Quiero asegurarme de que revertir, reiniciar, crear ramas, fusionar, etc. ... todo funciona bien.


Ambas opciones tienen problemas. --assume-unchanged restablece a sí mismo cada vez que se descarta el índice (p. ej., reinicio de git), por lo que probablemente lo haga tropezar más tarde o más temprano. Lo mismo ocurre con --skip-worktree ... sin embargo, puede mantener una lista local de archivos para no desproteger, de modo que el bit de omisión de worktree se vuelva a configurar automáticamente cuando sea necesario. Aquí están los pasos:

  • Establezca core.sparseCheckout en true para el repositorio.
  • Cree un archivo .git/info/sparse-checkout contenga dos patrones: * para incluir todo y !/foo para excluir el enlace simbólico foo ( / significa ancla al nivel superior).
  • Ahora, configure manualmente el bit de salto de trabajo, luego elimine el enlace simbólico.

Ahora puede continuar sin tener que temer que git confirme automáticamente el directorio, pero tenga en cuenta que aún tendrá problemas si alguien ejecuta explícitamente git add en el directorio o en cualquier archivo que contenga.

[Editado para agregar:] Después de una discusión adicional, identificamos una solución para el último problema: poner un archivo .gitignore con un patrón * dentro del directorio.