Convertir files (rastreados con Git) de Java a Kotlin en Android Studio

Una conversión de Java a Kotlin en Android Studio 2.3.2 (en 3.0 el mismo comportamiento) crea un nuevo file y elimina el anterior. Entonces Git no sabe nada sobre esta conversión. Y el historial de git no se guarda. En Intellij Idea todo está bien. IDE simplemente cambia el nombre del file y git guarda el historial. ¿Cómo puedo hacer lo mismo en Android Studio?

Git adivina el cambio de nombre de los pares de files agregados / eliminados, pero solo si estos files están lo suficientemente cerca, es decir, si el file fue renombrado sin cambios o con una pequeña cantidad de cambios.

Cuando aplica la conversión de java a kotlin, generalmente todas las líneas de un file cambian, por lo que git no puede encontrar que estos files antiguos y nuevos se relacionen entre sí de alguna manera.

En su lugar, puede usar el siguiente enfoque de dos etapas:

  • simplemente cambie la extensión del file .kt a .kt y comprométalo;
  • cambiarle el nombre, aplicar la conversión y confirmar el file .kt modificado.

Git no rastrea los nombres directamente; los infiere en function de los pares de agregar / eliminar files. Supongo que Idea ejecuta un git add cuando cambia el nombre, mientras que Android Studio simplemente borra los files antiguos. Intenta ejecutar git add yourself en los nuevos files y un git rm en los files antiguos y Git debería mostrarlos como cambios de nombre.

Como se menciona en las otras respuestas, git rastrea el contenido del file, no sus cambios de nombre. Cuando git log se ejecuta con la opción --follow , muestra el historial más allá del cambio de nombre; sin embargo, considera que un file debe cambiar de nombre solo si el contenido del file anterior y actual tiene un índice de similitud del 50% o más, es decir, less de la mitad de las líneas el file ha cambiado

Para este caso, donde la mayoría de las líneas han cambiado, puede establecer una barra inferior para el índice de similitud usando la opción -M :

 git log -M20% --follow -- /path/to/file 

Dependiendo del caso, es posible que deba ir incluso por debajo del 20%.