He estado usando Git en Windows (msysgit) para rastrear los cambios de algunos trabajos de diseño que he estado haciendo.
Hoy he estado trabajando en una PC diferente (con repositorio remoto brian
) y ahora estoy tratando de fusionar las ediciones realizadas hoy en mi versión local regular en mi computadora portátil.
En mi computadora portátil, solía git pull brian master
llevar los cambios a mi versión local. Todo estaba bien, aparte del documento principal de InDesign, esto se muestra como un conflicto.
La versión para PC ( brian
) es la última que quiero conservar, pero no sé qué comandos le dice al repositorio que use esta.
Intenté copiar directamente el archivo en mi computadora portátil, pero esto parece interrumpir todo el proceso de fusión.
¿Alguien puede señalarme en la dirección correcta?
fuente
git checkout --ours
? La página del manual sugiere (en mi humilde opinión) que el pago --ours / - suyo eliminará el cambio de la lista "ambos modificados, necesitan fusionarse" y lo agregará al índice, y creo que eso no es correcto. Creo que deberás corrergit add
después del pago.git merge branch_name
)--their
y--ours
, es decir, su rama == actualmente desprotegida y - nuestra es la rama, generalmente una rama remota o la especificación de ruta que está intentando fusionar en la actual rama. La[space]--[space]
opción desambigua a la especificación de ruta entre el nombre de rama y la especificación de ruta que ambos existen con el mismo nombre (por ejemplo, un nombre de rama existente es "abc" y existe un directorio llamado "abc").Debe resolver el conflicto manualmente (copiando el archivo) y luego confirmar el archivo (no importa si lo copió o usó la versión local) de esta manera
Git normalmente se confirma automáticamente después de la fusión, pero cuando detecta conflictos que no puede resolver por sí solo, aplica todos los parches que resolvió y deja el resto para que lo resuelva y confirme manualmente. La página de manual de Git Merge , el curso intensivo de Git-SVN o esta entrada de blog pueden arrojar algo de luz sobre cómo se supone que debe funcionar.
Editar: vea la publicación a continuación, en realidad no tiene que copiar los archivos usted mismo, pero puede usar
para seleccionar la versión del archivo que desea. Copiar / editar el archivo solo será necesario si desea una combinación de ambas versiones.
Por favor marque la respuesta mipadis como la correcta.
fuente
También puede superar este problema con
lo que causa
git
crear copias locales del binario en conflicto y generar su editor predeterminado en ellas:{conflicted}.HEAD
{conflicted}
{conflicted}.REMOTE
Obviamente, no puede editar archivos binarios en un editor de texto. En su lugar, copie el nuevo
{conflicted}.REMOTE
archivo{conflicted}
sin cerrar el editor. Luego, cuando cierre, el editorgit
verá que la copia de trabajo no decorada ha cambiado y su conflicto de fusión se resuelve de la manera habitual.fuente
Hit return to start merge resolution tool
") y git dejará los archivos adicionales en su lugar. Luego puede modificarlos o fusionarlos en una herramienta externa (útil para formatos de documentos binarios como LibreOffice / OpenOffice / MSWord) y guardar el resultado nuevamente en el nombre de archivo original. Para informar a git que el conflicto se ha resuelto,git add
el nombre de archivo original y luego puede finalizar la confirmación de fusión.Para resolver manteniendo la versión en su rama actual (ignore la versión de la rama en la que se está fusionando), simplemente agregue y confirme el archivo:
Para resolver sobrescribiendo la versión en su rama actual con la versión de la rama en la que se está fusionando, primero debe recuperar esa versión en su directorio de trabajo y luego agregarla / confirmarla:
Explicado con más detalle.
fuente
La respuesta de mipadi no funcionó para mí, tenía que hacer esto:
o, para mantener la versión fusionada en:
entonces
Y luego pude volver a hacer "git mergetool" y continuar con el siguiente conflicto.
fuente
De los
git checkout
documentosfuente
Encontré un problema similar (queriendo extraer un commit que incluyera algunos archivos binarios que causaban conflictos cuando se fusionaban), pero encontré una solución diferente que se puede hacer completamente usando git (es decir, no tener que copiar manualmente los archivos). Pensé que lo incluiría aquí, así que al menos puedo recordarlo la próxima vez que lo necesite. :) Los pasos se ven así:
Esto obtiene los últimos commit (s) del repositorio remoto (es posible que deba especificar un nombre de rama remoto, dependiendo de su configuración), pero no intenta fusionarlos. Registra el commit en FETCH_HEAD
Esto toma la copia de los archivos binarios que quiero y sobrescribe lo que está en el árbol de trabajo con la versión obtenida de la rama remota. git no intenta hacer ninguna fusión, por lo que terminas con una copia exacta del archivo binario desde la rama remota. Una vez hecho esto, puede agregar / confirmar la nueva copia como de costumbre.
fuente
Este procedimiento es para resolver conflictos de archivos binarios después de haber enviado una solicitud de extracción a Github:
En Github, en su solicitud de extracción, el conflicto debería desaparecer.
fuente
Si el binario es algo más que un dll o algo que se puede editar directamente archivo como una imagen, o un archivo de mezcla (y no necesita desechar / seleccionar un archivo u otro), una fusión real sería algo así como:
Sugiero buscar una herramienta diff orientada a lo que es su archivo binario, por ejemplo, hay algunos gratuitos para archivos de imagen, por ejemplo
y compararlos
Si no hay una herramienta de diferencia para comparar sus archivos, entonces si tiene el generador original del archivo bin (es decir, existe un editor para él ... como blender 3d, puede inspeccionar manualmente esos archivos, también ver los registros y preguntarle a la otra persona qué debe incluir) y hacer una salida de los archivos con https://git-scm.com/book/es/v2/Git-Tools-Advanced-Merging#_manual_remerge
$ git show :1:hello.blend > hello.common.blend $ git show :2:hello.blend > hello.ours.blend $ git show :3:hello.blend > hello.theirs.blend
fuente
Me he encontrado con dos estrategias para administrar la diferencia / fusión de archivos binarios con Git en Windows.
Tortoise git le permite configurar herramientas de diferencias / fusión para diferentes tipos de archivos en función de sus extensiones de archivo. Ver 2.35.4.3. Configuración avanzada de diferencias / fusión http://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html . Esta estrategia, por supuesto, se basa en las herramientas adecuadas de diferenciación / fusión disponibles.
Usando los atributos de git puede especificar una herramienta / comando para convertir su archivo binario en texto y luego dejar que su herramienta predeterminada de fusión / fusión haga lo suyo. Ver http://git-scm.com/book/it/v2/Customizing-Git-Git-Attributes . El artículo incluso da un ejemplo del uso de metadatos para diferenciar imágenes.
Obtuve ambas estrategias para trabajar con archivos binarios de modelos de software, pero utilizamos tortuga git ya que la configuración fue fácil.
fuente
Uso la aplicación Git Workflow para Excel: https://www.xltrail.com/blog/git-workflow-for-excel para resolver la mayoría de los problemas de fusión relacionados con mis archivos binarios. Esta aplicación de código abierto me ayuda a resolver problemas de manera productiva sin perder demasiado tiempo y me permite elegir la versión correcta del archivo sin ninguna confusión.
fuente
mi caso parece un error ... usando git 2.21.0
Hice un tirón ... se quejó de archivos binarios:
Y luego, nada en ninguna de las respuestas aquí dio como resultado ningún resultado que tuviera sentido.
Si miro qué archivo tengo ahora ... es el que edité. Si yo tampoco:
Me sale:
y todavía tengo mi versión del archivo. Si firmo y luego finalizo la compra, en su lugar dirá 1, pero aún así me da mi versión del archivo.
git mergetool dice
y el estado de git dice
Una opción es deshacer el commit ... pero tuve mala suerte y tuve muchos commits, y este malo fue el primero. No quiero perder el tiempo repitiendo eso.
para resolver esta locura:
Acabo de correr
que pierde la versión remota y probablemente desperdicia algo de espacio almacenando un archivo binario adicional ... luego
lo que me devuelve la versión remota
luego editó el archivo nuevamente ... y luego confirmó y presionó, lo que nuevamente significa desperdiciar espacio con otra copia del archivo binario.
fuente
git checkout --ours <path>
he recibidoUpdated 0 paths from the index
. Lo arreglé con elgit add <path>
comando, que hace lo mismo.