2012-03-29 8 views
6

Un amigo y yo estamos trabajando por separado en un proyecto. Al principio, empujé una carpeta llamada old-name y él sacó de ella. En medio de eso, decidí cambiar el nombre de la carpeta old-name al new-name para distinguirlo mejor de otros proyectos (digamos que old-name es demasiado genérico y new-name es más específico). Así que le dije a mi amigo que cambie el nombre de su carpeta de proyecto al new-name también. Y luego estamos trabajando por separado.Git Renaming Issues

Ahora, ha enviado lo que ha hecho al servidor remoto (en la carpeta new-name), cuando intento extraer del servidor, ocurren todos estos conflictos (cambiar nombre/agregar) y aparentemente hay una copia extra de cada archivo el proyecto new-name ahora.

new-name/index.php (MINE) 
new-name/index.php~98789491981agsagasga98a914a98wt (his commit ID I believe) 

Mi pregunta es, ¿cómo podemos resolver esto sin este problema de cambio de nombre de conflicto git? Por supuesto, puedo resolver el conflicto manualmente, pero hay demasiados archivos para verificar y eliminar debido a esta nueva copia adicional que git ha enviado a mi repositorio.

Gracias

Respuesta

0

Debe desplegables una nueva copia de trabajo a una nueva carpeta local, justo al lado del código que trabajaron en primer lugar. Luego, use un Diff style tool para comparar y fusionar su trabajo en la nueva copia local. Luego, realice cambios en el nuevo desplegable y bam, tiene sus cambios confirmados. Sé que esto no guarda todo tu registro de cambios en lo que hiciste, pero si hacerlo manualmente no es una opción, esta es la mejor opción.

1

Simplemente agregue todos sus archivos. Cualquier cosa que sea un simple cambio de nombre se identificará como que no tiene diferencia y se eliminará del índice. Así que, aunque un 'estado de git' muestra una gran cantidad de problemas, después del 'git add -A' quedarán pocos (y todo lo que quede tendrá diferencias reales). Debería verificar una nueva rama de inmediato (antes del 'git add -A') para que pueda retroceder fácilmente si va hacia el sur.

1

Solo supongo, pero me parece que la detección de cambio de nombre de Git no detectó el cambio de nombre al fusionarse. ¿Hay muchos archivos en este directorio? ¿Se modificaron todos los archivos?

Intente volver a realizar la fusión/extracción después de aumentar el valor de las configuraciones merge.renameLimit o diff.renameLimit. De git help config:

diff.renameLimit 
    The number of files to consider when performing the copy/rename 
    detection; equivalent to the git diff option -l. 

merge.renameLimit 
    The number of files to consider when performing rename detection 
    during a merge; if not specified, defaults to the value of 
    diff.renameLimit. 

También puede probar el -Xrename-threshold=70 para bajar el umbral de detección de cambio de nombre similitud. De git help merge (también en git help pull):

rename-threshold=<n> 
    Controls the similarity threshold used for rename detection. 
    See also git-diff(1) -M. 

De git help diff:

-M[<n>], --find-renames[=<n>] 
    Detect renames. If n is specified, it is a threshold on the 
    similarity index (i.e. amount of addition/deletions compared to the 
    file’s size). For example, -M90% means git should consider a 
    delete/add pair to be a rename if more than 90% of the file hasn’t 
    changed. 

Tenga en cuenta que no estoy seguro de lo que sucede cuando los finales de línea se convierten entre el estilo Unix y Windows estilo. Git podría pensar que los archivos son 100% diferentes, incluso si la única diferencia son los finales de línea, así que asegúrese de que ambos estén usando los mismos finales de línea.

+0

Puede decirle a git que ignore los cambios en el espacio en blanco, que resuelve el problema de los finales de línea. Ver también http://stackoverflow.com/questions/861995/is-it-possible-for-git-merge-to-ignore-line-ending-differences –