Debido a la convención de nomenclatura por desarrollador, tuve que cambiar el nombre de un montón de archivos de una aplicación laravel, por ejemplo. s upplyController.php a S upplyContoller.php. Los archivos se crean en Windows, por lo que el sistema de archivos no distingue entre mayúsculas y minúsculas, pero el VPS de producción tiene debian / mayúsculas y minúsculas, por lo que es importante tener los nombres correctos para implementar.

Los cambios ya se han confirmado y enviado, y afaik es el comportamiento normal, el repositorio de git contiene la versión en minúscula de los archivos. Además de git mv para cada archivo, ¿hay alguna solución mejor recomendada para corregir el repositorio?

1
gramgram 18 feb. 2020 a las 15:22

2 respuestas

La mejor respuesta

git mv es tu mejor opción.

¿Lo que puede interesarle también es probablemente una forma de modificar, de forma masiva, muchos archivos diferentes?

Si ese es el caso, entonces su verdadera pregunta es: ¿cómo generar un bucle que realice los diversos git mv de manera consistente?

P.ej.:

$ git mv controllers/abccontroller.php controllers/AbcController.php
$ git mv controllers/defcontroller.php controllers/DefController.php
$ git mv controllers/ghicontroller.php controllers/GhiController.php
$ git mv controllers/jklcontroller.php controllers/JklController.php
...

Supongo que esto sería más fácil en un sistema operativo que no sea Windows por dos razones: shells + OS realmente es .

0
Patrick Allaert 18 feb. 2020 a las 13:11

Si bien git mv funcionará, es necesario que proporcione una asignación de fileName a FileName, lo que puede ser tedioso, y la mayoría de los intentos de automatizar esto serían propensos a errores.

Por otro lado, si tiene un clon cuyo árbol de trabajo tiene la capitalización deseada, puede reconstruir el índice de ese árbol de trabajo. (Puede parecer arriesgado borrar el índice de esta manera; pero incluso si algo sale mal, podría fácilmente reconstruir el índice con reset o, en el peor de los casos, restaurar desde el origen, que es parte del punto de control de fuente distribuida).

Entonces, con el repositorio en un estado limpio (sin archivos no rastreados que no se ignoren, sin cambios no organizados, y preferiblemente tampoco cambios escalonados pero no confirmados):

git rm --cached -r -- :/:
git add -- :/:

El truco aquí es simple: en una configuración que no distingue entre mayúsculas y minúsculas, git comprenderá que el archivo de árbol de trabajo MyFile es el mismo que la entrada de índice myFile, por lo que solo hace una adición no cambia el nombre en el índice. Pero si el índice no tiene una entrada coincidente, el caso del nombre del archivo coincidirá con lo que está actualmente en el árbol de trabajo.

(Parece que tal vez estás diciendo que ese no es el comportamiento que esperas; acabo de volver a probar, y al menos a partir de 2.25.0.windows.1 ese es el comportamiento que veo. No recuerdo ninguna versión que se haya comportado diferentemente.)

2
Mark Adelsberger 18 feb. 2020 a las 14:24