2011-05-26 13 views
19

Tengo un problema con un repositorio git y windows. El problema es que el repositorio git tiene un enlace simbólico de Linux y con desarrolladores que ejecutan Windows, que obviamente no funciona. Ahora, dado que ese vínculo 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 lo que apunta a los puntos simbólicos) pero git ha ignorado esos cambios en particular. Ahora puedo eliminar los enlaces simbólicos, crear una carpeta con el mismo nombre y simplemente agregar un .gitignore que ignore todo. Ahora, en cuanto a asegurarme de que Git ignore la eliminación del enlace simbólico, he encontrado dos soluciones posibles mientras investigo. Las soluciones que encontré son:git asumir sin cambios vs skip worktree - ignorar un enlace simbólico

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 hago esto, nunca se deshaga a menos que lo haga específicamente. Quiero asegurarme de que revertir, restablecer, crear sucursales, fusionar, etc. todo funciona bien.

+1

posible duplicado de [Git - Diferencia entre 'asumir-sin cambios' y 'skip-worktree'] (http://stackoverflow.com/questions/13630849/git-difference-between-assume-unchanged-and-skip- worktree) – Flimm

Respuesta

21

Ambas opciones tienen problemas. --assume-unchanged se restablece cada vez que se descarta el índice (por ejemplo, git reset), por lo que es probable que tarde o temprano te haga tropezar. Lo mismo ocurre con --skip-worktree ... sin embargo, puede mantener una lista local de archivos para no verificar, de modo que el bit skip-worktree se establece de nuevo automáticamente siempre que sea necesario. Estos son los pasos:

  • Set core.sparseCheckout a cierto para el repositorio.
  • Cree un archivo .git/info/sparse-checkout que contenga dos patrones: * para incluir todo y !/foo para excluir el enlace simbólico foo (/ significa anclaje al nivel superior).
  • Ahora, configure manualmente el bit skip-worktree, luego elimine el enlace simbólico.

Ahora puede seguir adelante sin tener que temer que Git se comprometa de forma automática el directorio, pero tenga en cuenta que usted todavía tendrá problemas si alguien se queda explícitamente git add en el directorio o cualquier archivo en él.

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

+0

Por error presioné SKIP WORK TREE y ahora no puedo mover la rama local. ¿Qué puedo hacer para revertir la acción que he tomado por error? ¿Hay alguna opción? – Dev

+2

@Dev: 'git update-index --no-skip-worktree ' – nickgrim

Cuestiones relacionadas