TortoiseGit: Mover archivos a una nueva carpeta no se reconoce como movimiento

TortoiseGit: Mover archivos a una nueva carpeta no se reconoce como movimiento

Estoy intentando mover algunos archivos de mi repositorio a una carpeta nueva. Quiero que git/TortoiseGit reconozca que se trata de un movimiento en lugar de una eliminación y múltiples adiciones.
¿Cómo puedo hacer que esto funcione? Revisé la documentación de TortoiseGit y busqué en Google, pero no pareció ser muy útil.

Entonces, lo que tengo es esta estructura:

repo_root/somefile.txt

Lo que quiero:

repo_root/new_folder/somefile.txt

Por supuesto, "algún archivo.txt" representa todos los archivos y carpetas que se están moviendo.

Respuesta1

Recuerda una cosa:Git rastrea únicamente el contenido del archivo.

DeMover archivossección del libro Pro Git v2:

A diferencia de muchos otros sistemas VCS, Git no rastrea explícitamente el movimiento de archivos. Si cambia el nombre de un archivo en Git, no se almacenan metadatos en Git que indiquen que cambió el nombre del archivo. Sin embargo, Git es bastante inteligente a la hora de descubrirlo después del hecho.

Y mover y cambiar el nombre es lo mismo en Git.

Entonces,Git detecta el movimiento/cambio de nombre automáticamente solo funciona bajo la premisa de que esos archivos no se modifican.

Git hace estas cosas solo cuando mueves/cambias el nombre del archivo:

  1. Se elimina un archivo rastreado, git obtiene el SHA-1 del contenido de ese archivo, se supone que el valor es abc.
  2. Se agrega un archivo sin seguimiento, git calcula el SHA-1 del contenido de ese archivo, asume que el valor abctambién es.
  3. Si se compromete en este momento, git descubrirá que tienen el mismo valor SHA-1 y luego los tratará como un cambio de nombre.

Supongamos que modificó algunos archivos rastreados y también los movió a otra carpeta. Entonces, desafortunadamente, git no puede detectarlos como cambios de nombre/movimiento automático cuando se confirma.

Si realmente quieres que git rastree el cambio de nombre/movimiento automáticamente,necesitas hacer:

Asegúrese de NO modificar los archivos y solo cambiar el nombre/mover los archivos en una sola confirmación.


Si desea modificar un archivo y moverlo al mismo tiempo, y desea que git los detecte como cambio de nombre/movimiento usando TortoiseGit, entonces en su caso:

  1. Haga clic derecho en ese archivo y haga clic en TortoiseGit -> Rename...el elemento del menú contextual.
  2. prefijo new_folder\al nombre del archivo, consulte: ingrese la descripción de la imagen aquí
  3. comprometerse

Nota: debe cambiar el nombre de los archivos uno por uno. Supongamos que hay mucho trabajo por hacer. Por lo tanto, es mejor cambiar el nombre del archivo únicamente.

Nota 2: Si modificamuchoen el archivo, git no puede darse cuenta de que se trata de un cambio de nombre/movimiento.

Respuesta2

Desde elDocumentación de TortoiseGit:

Si desea mover archivos dentro de su árbol de trabajo, tal vez a una subcarpeta diferente, puede usar el controlador de arrastrar y soltar del botón derecho del mouse:

A. seleccione los archivos o directorios que desea mover

B.arrastrar hacia la derechaa la nueva ubicación dentro del árbol de trabajo

C. suelte el botón derecho del mouse

D. en el menú emergente seleccioneMenú contextual → Git Mueva archivos versionados aquí

Respuesta3

Git manejará esto en el back-end después de que usted se comprometa. Mientras maneja los archivos no confirmados, inicialmente tratará las creaciones y eliminaciones como acciones separadas, pero después de confirmar, intentará resolver las eliminaciones con creaciones para ver si en realidad fue solo un movimiento de archivos. Puede ver esto usted mismo en el registro de confirmación con mensajes de "archivo antiguo ==> archivo nuevo" cuando git encuentra un movimiento de archivo.

Alternativamente, puedes usar git mv si te hace sentir más seguro. https://git-scm.com/docs/git-mv

información relacionada