Manejo de cambios sin sentido con git

Tengo algunos files de configuration que me gustaría versionar como parte de un git repo, pero el order de los campos en la configuration cambia algunas veces cuando ejecuto el software. El order de los campos no tiene ninguna importancia para el software, por lo que me gustaría que no importara para git tampoco.

Contaminaría mi historial de compromiso si tuviera que cometer estos cambios, y los files contaminan mi git status contrario. La opción ideal sería algo así como el seguimiento manual de files.

¿Cómo debo manejar los files que cambian de manera sin sentido?

No hay una buena solución general para este problema. git quiere usar hashes para determinar "sameness" -ness y un reorderamiento de las properties siempre cambiará el hash.

Lo que supongo que podría hacer, si el order en el file realmente no importa, es utilizar un filter para orderarlo al agregarlo al índice. Esto supone que el order del file completo es irrelevante, lo que puede o no adecuarse a su formatting de file.

Primero crearía un file .gitattributes en la raíz de su proyecto, con una input como

 path/to/config/file filter=sorted 

Puede usar comodines (con el mismo significado que en .gitignore), pero de una manera u otra desea asociar el filter con cada uno de sus files de configuration donde el order no importa. Esto debe add y commit .

Luego debe crear la configuration de filter, por lo que emite el command

 git config filter.sorted.clean sort 

Ahora, sin importar en qué order aparezcan las líneas en su tree de trabajo, estarán en un order único (orderado) en el índice (y cuando se confirme). (Por supuesto, eso también significa que una nueva extracción del file, como después de un clon, tendrá el file orderado).

De nuevo, esto solo funciona para formattings de files que se pueden orderar de forma segura, como un file de properties key / valor que no tiene comentarios en líneas separadas. Pero "el order no importa" podría significar otras cosas. Al igual que tal vez tenga files XML en los que el order de los elementos de nivel superior no importa, pero cada elemento se extiende por varias líneas y debe mantenerse unido. O algo completamente diferente …

En esos casos, necesitaría una herramienta que pueda aceptar el contenido del file en STDIN, normalizar la representación de una manera que elimine las diferencias "sin importancia" e imprimir el resultado en STDOUT. Lo usarías como tu filter clean lugar de sort .