tag - tipos de etiquetas en git
Grabar la operaciĆ³n de copia de archivos con Git (2)
Cuando muevo un archivo en git usando git-mv, el estado muestra que el archivo ha sido renombrado e incluso si alterno algunas partes, todavía considera que es casi lo mismo (lo cual es bueno porque me permite seguir el historial) .
Cuando copio un archivo, el archivo original tiene un historial que me gustaría asociar con la nueva copia.
Intenté mover el archivo y luego intentar volver a realizar la compra en la ubicación original. Una vez que moví git, no me dejaré registrar la ubicación original.
He intentado hacer una copia del sistema de archivos y luego agregar el archivo - git lo cataloga como un nuevo archivo.
¿Hay alguna manera de hacer que git grabe una operación de copia de archivo de forma similar a cómo registra un archivo rename / move donde el historial se puede remontar al archivo original?
Puede obligar a Git a detectar el historial del archivo copiado:
- En lugar de copiar, cambie a una nueva rama y mueva el archivo a su nueva ubicación allí.
- Cambie a la rama original y cambie el nombre del archivo.
- Combina la nueva rama en la rama original, resolviendo el conflicto trivial manteniendo ambos archivos.
- Restaure el nombre de archivo original en una confirmación separada.
(Solución tomada de https://.com/a/44036771/1389680 .)
Git no renombra el seguimiento ni copia el seguimiento, lo que significa que no registra los cambios de nombre o las copias. Lo que hace en cambio es cambiar el nombre y copiar la detección . Puede solicitar la detección de cambio de nombre en git diff
(y git show
) utilizando la opción -M
, puede solicitar detección de copia adicional en archivos modificados utilizando la opción -C
( -C
implica -M
), y puede solicitar una copia más costosa detección entre todos los archivos con --find-copies-harder
o -C -C
(lo que implica -C
, que implica -M
). Ver la página de git-diff .
También puede configurar git para que siempre cambie el nombre de la detección estableciendo los diff.renames
de los diff.renames
un valor verdadero booleano (por ejemplo, true
o 1
), y puede solicitar a git que también realice la detección de copia estableciéndolo para copy
o copy
. Ver la página de git-config .
Verifique también la opción -l
para git diff
y la variable de configuración relacionada diff.renameLimit
.
Tenga en cuenta que git log <pathspec>
funciona de manera diferente en Git: aquí <pathspec>
es un conjunto de delimitadores de ruta, donde ruta puede ser un (sub) nombre de directorio. Filtra y simplifica el historial antes de que el cambio de nombre y la detección de copias entren en juego. Si desea seguir el cambio de nombre y las copias, utilice git log --follow <filename>
(que actualmente es un poco limitado, y funciona solo para un solo archivo).