FORO SPAMLOCO


GitHub: al renombrar archivos se borra el historial


HTML, CSS, PHP, JavaScript, Java... tus dudas por aquí...
   

GitHub: al renombrar archivos se borra el historial

Notapor Manuel de la Fuente » Abr 2013, 01:06

Estoy dando mis primeros pasos con Git y GitHub. El caso es que tengo un archivo que quiero renombrar; digamos, de file1 a file2, así que hago esto

Código: Seleccionar todo
git mv file1 file2


Reviso el status:

Código: Seleccionar todo
[manuelfte@arch Git]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    file1 -> file2


Aparentemente todo bien. Hago el commit:

Código: Seleccionar todo
git commit -m "Rename file1 to file2"


Y subo los cambios a GitHub:

Código: Seleccionar todo
git push


El cambio queda registrado, pero he aquí que al revisar el historial del archivo en el sitio, no queda nada más que ese último commit, todos los cambios anteriores al renombramiento han desaparecido, como si se tratase de un archivo nuevo.

¿Cuál es el procedimiento para renombrar un archivo sin que se borre su historial?
Avatar de Usuario
Manuel de la Fuente
Nivel 7
 
Mensajes: 551
Registrado: May 2009, 15:33
Ubicación: México
Twitter: @ManuelFte



Re: GitHub: al renombrar archivos se borra el historial

Notapor Alejandro » Abr 2013, 01:33

No lo probé, pero creo que así puedes recuperarlo: http://stackoverflow.com/questions/2314 ... ir-history
Avatar de Usuario
Alejandro
Administrador
 
Mensajes: 4066
Registrado: May 2009, 18:28
Ubicación: Uruguay
Twitter: @spamloco

Re: GitHub: al renombrar archivos se borra el historial

Notapor Manuel de la Fuente » Abr 2013, 15:05

Las dos primeras respuestas no las probé pero por lo que veo solo sirven para revisar los logs en local, no para reflejar el historial en GitHub, que es lo que buscaba. La tercera directamente no hace nada diferente a los comandos que escribí arriba. La cuarta sí funciona, pero es una solución algo "nuclear", porque sustituye el nombre del archivo en todos los commits incluyendo los anteriores, como si mi archivo desde el principio se hubiera llamado file2; lo cual conlleva una serie de desventajas que el mismo autor menciona.

Investigando un poco sobre el tema encontré esto:

Renames are handled implicitly rather than explicitly. A common complaint with CVS is that it uses the name of a file to identify its revision history, so moving or renaming a file is not possible without either interrupting its history, or renaming the history and thereby making the history inaccurate. Most post-CVS revision control systems solve this by giving a file a unique long-lived name (a sort of inode number) that survives renaming. Git does not record such an identifier, and this is claimed as an advantage.


http://en.wikipedia.org/wiki/Git_(software)

Lo que me confirma que no hay un método nativo para cambiar el nombre de un archivo sin que se pierda su historial, Git no tiene esta capacidad, pero lo que más me sorprendió fue esa última línea, donde Linus Torvalds (creador de Git) prácticamente zanja el asunto recurriendo a la consabida frase de "no es un bug, es una feature". WTF? :shock:

http://marc.info/?l=git&m=114123702826251

En resumidas cuentas, lo que dice es que intentar mantener el historial entre renombramientos, fusiones y divisiones de archivos generaría demasiados conflictos, así que para acabar pronto Git simplemente lo borra y asunto arreglado. :|

De nuevo me sorprende Linus pero ahora no de forma positiva. Pienso que debe existir algún método para mantener el historial sin incurrir en todas las dificultades que menciona; aunque soy demasiado nuevo en el tema como para discutir las decisiones del creador, así que lo dejo ahí.
Avatar de Usuario
Manuel de la Fuente
Nivel 7
 
Mensajes: 551
Registrado: May 2009, 15:33
Ubicación: México
Twitter: @ManuelFte