2011-05-23 25 views
37

Aquí está el panorama:git actualización del índice --assume-sin cambios y git reset

En mi directorio de trabajo, tengo una serie de archivos (llamémosles A, B, C) que he editado . Luego ejecuté git update-index --assume-unchanged en esos archivos. Ahora git status regresa en blanco. Bueno.

Ahora, si hago un git reset --hard, los contenidos de los archivos A, B y C vuelven a los contenidos antes de editarlos y "asumirlos sin cambios".

¿Hay alguna manera de evitar que git revierta los archivos A, B y C y simplemente ignórelos?

Gracias,

Ken

+0

Hm, buena pregunta. No sé la respuesta, pero tal vez puedas escribir un pequeño script que haga un checkout en esos tres archivos, y luego usarlo como un gancho post-acción en acciones como el reinicio que haría que se sobrescriban. – MatrixFrog

Respuesta

44

que puede hacer:

git update-index --skip-worktree A 
+0

¡Agradable! Eso funciona. El único problema que tengo ahora es que el plugin git para eclipse (egit) no puede manejar --skip-worktree ... Grr. –

+0

Tenga en cuenta que si tiene habilitados los checkes dispersos (https://www.kernel.org/pub/software/scm/git/docs/git-read-tree.html#_sparse_checkout), esta configuración se sobrescribirá y debe usar el archivo 'sparse-checkout' para ignorar los archivos en cuestión. – AndreKR

+0

¿No está utilizando el resultado del archivo 'sparse-checkout' no solo ignorando sino también eliminando automáticamente estos archivos? – Powerman

1

es necesario agregar una entrada .gitignore de archivos de estos archivos si desea hacer caso de ellos. Agregue solo el archivo .gitignore, confírmelo y ahora ignorará los cambios en ellos.

Sin embargo, creo que debe decirnos por qué lo está haciendo, cuál es el contenido de los archivos, la naturaleza de ellos (¿son artefactos?) - entonces obtendrá la respuesta adecuada.

También, update-index con el assume-unchanged está destinado a aumentar el rendimiento si su árbol en el sistema de archivos de su SO tarda mucho en recopilar cambios para una ruta en particular. No recomendaría usarlo en su caso a menos que esté ignorando esos archivos debido a los largos git status o git diff u otros tiempos de ejecución de comandos.

+1

Los archivos A, B y C son en realidad archivos de enlace simbólico de Unix que fueron procesados ​​en un sistema de Windows. Como Windows no puede funcionar con enlaces simbólicos de Unix, git los convierte en archivos de texto sin formato. Mi script luego se ejecuta y encuentra estos archivos 'ficticios' y los reemplaza con enlaces simbólicos de Windows. Si hago un estado de git aquí, entonces tengo A, B y C en estado modificado. En cambio, sin embargo, quiero que los cambios en A, B, C sean ignorados casi para siempre. git update-index --assume-unchanged funciona muy bien, a menos que se emita el restablecimiento de git. De ahí la pregunta. Espero que esto aclare un poco las cosas =) –

1

Usted podría utilizar

$ git stash 
$ git reset --hard 
$ git stash pop 
Cuestiones relacionadas