Sunday, November 13, 2016

Opciones Binarias De Git Merge Conflict

Esta guía muestra cómo resolver algunos conflictos comunes a través de la línea de comandos. Necesitará un editor de texto para resolver algunos de los conflictos. Creación de una colisión de edición Este es el tipo de conflicto más común. Sucede cuando dos ramas han cambiado la misma parte del mismo archivo, y luego esas ramas se combinan entre sí. Por ejemplo, si realiza un cambio en una línea determinada de un archivo y su colega que trabaja en un repositorio realiza un cambio en la misma línea exacta, se produce un conflicto de combinación. Git tiene problemas para entender qué cambio debe ser usado, por lo que le pide que ayude. Cuando se produce este tipo de conflicto, Git escribe un bloque especial en el archivo que contiene el contenido de ambas versiones donde ocurrió el conflicto. Para completar este tipo de combinación, utilice su editor de texto para resolver el conflicto, luego agregue el archivo y confírmelo para completar la fusión. Para este ejemplo, suponga que está trabajando en rama-a. Y han hecho algunos cambios en un archivo llamado planets. md. Mientras tanto, su amigo en el otro lado del mundo ha hecho un cambio diferente a la misma línea. Si intenta combinar su rama de amigos en la suya, habrá un conflicto de combinación. Ejecutar git status le informa sobre el conflicto: Ambos han modificado planets. md. Cuando abra el archivo en su editor de texto, verá ambos cambios: En rama-a. Escribiste la palabra nueve, pero tu amigo escribió ocho. Git agrega automáticamente marcadores de conflicto a las áreas afectadas. Un área marcada por el conflicto comienza con ltltltltltltlt y termina con gtgtgtgtgtgtgt. Estos son también conocidos como los marcadores de conflicto. Los dos bloques en conflicto se dividen por a. Aquí tienes varias opciones. Usted puede mantener sus cambios, tomar sus amigos cambios, o hacer un nuevo cambio. Lo que usted hace, usted necesita cerciorarse de resolver el conflicto de tal manera que el archivo tenga sentido, y cada uno es feliz. En este caso, usted pondrá en una nueva versión completa de la línea que refleja lo que sucedió. El objetivo es conseguir que el archivo se vea exactamente como lo desea. Usted borrará los marcadores del conflicto, y apenas mecanografíe hacia fuera un nuevo cambio: Eso es él Usted puede ahora git agrega este archivo, confirma el cambio con un nuevo mensaje del compromiso, y esté en su manera. Resolución de un conflicto de archivos eliminado Los conflictos de archivos eliminados ocurren cuando una persona edita un archivo y otra persona elimina ese archivo en su sucursal. Git no sabe si desea mantener el archivo con las nuevas ediciones, o eliminar el archivo y olvidarse de esas ediciones. Este ejemplo mostrará cómo resolver esto en ambos sentidos. Mantener el archivo editado En primer lugar, resolverá el conflicto guardando los nuevos cambios. Suponga que ha agregado una línea a su archivo README. md en la rama-b. Pero alguien más ha borrado el archivo completamente en branch-c. Git declara el siguiente conflicto: Puedes resolver esto agregando el archivo de nuevo, y confirmándolo una vez más: Resolviendo eliminando el archivo Ahora, resolverás el conflicto de la manera opuesta: dejando el archivo eliminado. Una vez más, con un conflicto de combinación, Git declara: Ahora, desea eliminar el archivo, así que con el comando git rm: Parece bueno, así que confírmelo con el mensaje predeterminado: He estado usando Git en Windows (msysgit) para realizar un seguimiento Cambios para algún trabajo de diseño que he estado haciendo. Hoy he estado trabajando en un PC diferente (con repo brian remoto) y ahora estoy tratando de fusionar las ediciones hechas hoy en mi versión local regular en mi computadora portátil. En mi computadora portátil, he utilizado git pull brian maestro para tirar de los cambios en mi versión local. Todo estaba bien aparte del documento principal de InDesign - esto muestra como un conflicto. La versión en el PC (brian) es la última que quiero mantener, pero no sé qué comandos le dice al repo que use este. Traté de copiar directamente el archivo a través de mi computadora portátil, pero esto parece romper todo el proceso de fusión. Alguien me puede apuntar en la dirección correcta Zitrax Usted dif el archivo después de ejecutar git checkout - horas. La página de manual sugiere (IMHO) que checkout --ours / - el suyo quitará el cambio del quotboth modificado, necesita mergequot lista y lo agrega al índice, y pienso that39s no correcto. Creo que tendrá que ejecutar git agregar después de la salida. Ndash Tim Keating 13 de mayo 13 a las 21:06 También puede superar este problema con lo que hace git para crear copias locales del binario en conflicto y generar su editor por defecto en ellos: Obviamente, no puede editar archivos de binarios útil en un editor de texto. En su lugar, copia el nuevo archivo. REMOTE sin cerrar el editor. A continuación, cuando cierre el editor, git verá que la copia de trabajo no decorada ha cambiado y su conflicto de combinación se resuelve de la manera habitual. Si los archivos son grandes o no desea arriesgar el binario de apertura en un editor de texto, puede pulsar ctrlc en el prompt de mergetool (quot Hit return para iniciar quot de resolución de mezcla) y git dejará los archivos adicionales en su lugar. A continuación, puede modificarlos o fusionarlos en una herramienta externa (útil para formatos de documentos binarios como LibreOffice / OpenOffice / MSWord) y guardar el resultado de nuevo en el nombre de archivo original. Para informar a git que el conflicto se ha resuelto, git agrega el nombre de archivo original y, a continuación, puede finalizar el commit de combinación. Ndash Felix Aug 24 15 at 21:54 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 confiera el archivo: Para resolver sobreescribiendo la versión en su rama actual con La versión de la rama en la que se está fusionando, es necesario recuperar esa versión en su directorio de trabajo en primer lugar, y luego agregar / confirmar: Ive venir a través de dos estrategias para la gestión de dif / fusión de archivos binarios con Git en Windows. Tortoise git le permite configurar las herramientas diff / merge para diferentes tipos de archivos basándose en sus extensiones de archivo. Véase 2.35.4.3. Ajustes avanzados de Diff / Merge tortoisegit. org/docs/tortoisegit/tgit-dug-settings. Esta estrategia por supuesto relys sobre las herramientas adecuadas de dif / merge disponibles. Utilizando los atributos git puede especificar una herramienta / comando para convertir su archivo binario en texto y luego dejar que su herramienta predeterminada diff / merge haga su cosa. Consulte git-scm / book / it / v2 / Personalización-Git-Git-Atributos. El artículo incluso da un ejemplo de usar metadatos a las imágenes del diff. Tengo las dos estrategias para trabajar con los archivos binarios de los modelos de software, pero fuimos con tortuga git como la configuración era fácil. Respondió Nov 27 14 at 15:46 Si el binario es algo más que un dll o algo que puede ser editado directamente como una imagen, o un archivo de mezcla (y usted no necesita a la basura / seleccionar un archivo u otro) una fusión real Sería algunos como: Sugiero la búsqueda de una herramienta de difusión orientada a lo que son archivos binarios, por ejemplo, hay algunos libres para los archivos de imagen por ejemplo y compararlos. Si no hay ninguna herramienta de comparación disponible 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, Logs, y preguntar a la otra persona lo que debe incluir) y hacer una salida de los archivos con git-scm / book / es / v2 / Git-Tools-Advanced-Mergingmanualremerge git show: 1: hello. blend gt hellomon. blend git Mostrar: 2: hello. blend gt hello. ours. blend git show: 3: hello. blend gt hello. theirs. blend respondió 13 ago a las 21:03 Su respuesta 2016 Stack Exchange, IncDESCRIPTION Lee la salida diff suministrada (es decir, una Patch) y lo aplica a los archivos. Cuando se ejecuta desde un subdirectorio en un repositorio, las rutas remendadas fuera del directorio se ignoran. Con la opción --index el parche también se aplica al índice, y con la opción --cached el parche solo se aplica al índice. Sin estas opciones, el comando aplica la revisión sólo a los archivos y no requiere que estén en un repositorio de Git. Este comando aplica el parche pero no crea un commit. Utilice git-am1 para crear commits de parches generados por git-format-patch1 y / o recibidos por correo electrónico. OPCIONES Los archivos para leer el parche desde. - se puede utilizar para leer de la entrada estándar. En lugar de aplicar el parche, sale diffstat para la entrada. Apaga la aplicación. Similar a --stat. Pero muestra el número de líneas añadidas y eliminadas en la notación decimal y la ruta sin abreviatura, para que sea más amigable con la máquina. Para los archivos binarios, las salidas dos - en lugar de decir 0 0. Se apaga aplicar. En lugar de aplicar el parche, genera un resumen condensado de la información obtenida de los encabezados extendidos git diff, como creaciones, renombres y cambios de modo. Apaga la aplicación. En lugar de aplicar el parche, verifique si el parche es aplicable al árbol de trabajo actual y / o al archivo de índice y detecta errores. Apaga la aplicación. Cuando --check está en vigor, o cuando se aplica el parche (que es el valor predeterminado cuando ninguna de las opciones que lo inhabilita está en vigor), asegúrese de que el parche sea aplicable a lo que el archivo de índice actual registra. Si el archivo que se va a parchear en el árbol de trabajo no está actualizado, se marca como un error. Este indicador también hace que el archivo de índice se actualice. Aplique un parche sin tocar el árbol de trabajo. En su lugar, tome los datos almacenados en caché, aplique el parche y almacene el resultado en el índice sin utilizar el árbol de trabajo. Esto implica --index. Cuando el parche no se aplica de forma limpia, recurrir a la combinación de 3 vías si el parche registra la identidad de blobs a los que se supone que se aplica, y tenemos esos blobs disponibles localmente, posiblemente dejando los marcadores de conflicto en los archivos del árbol de trabajo Para que el usuario pueda resolver. Esta opción implica la opción --index, y es incompatible con las opciones --reject y --cached. La nueva salida git diff tiene información de índice incorporada para cada blob para ayudar a identificar la versión original a la que se aplica el parche. Cuando se da este indicador, y si las versiones originales de los blobs están disponibles localmente, crea un índice temporal que contiene esos blobs. Cuando se encuentra un cambio de modo puro (que no tiene información de índice), la información se lee del índice actual en su lugar. Aplique el parche a la inversa. Para la atomicidad, git se aplica de forma predeterminada falla el parche completo y no toca el árbol de trabajo cuando algunos de los tontos no se aplican. Esta opción hace que aplique las partes del parche que sean aplicables, y deje a los hunks rechazados en los archivos. rej correspondientes. Cuando --numstat se ha dado, no munge pathnames, pero utiliza un formato NUL-terminated máquina legible. Sin esta opción, cada salida de ruta de acceso tendrá TAB, LF, comillas dobles y caracteres de barra invertida reemplazados por t. norte. . Y. Respectivamente, y el nombre de la ruta se incluirá entre comillas dobles si alguna de esas sustituciones ocurrieron. Elimine las barras diagonales principales de las rutas de dif tradicionales. El valor predeterminado es 1. Asegúrese de que al menos ltngt las líneas de contexto coinciden antes y después de cada cambio. Cuando existen menos líneas del contexto circundante, todas ellas deben coincidir. De forma predeterminada, ningún contexto se ignora. De forma predeterminada, git apply espera que el parche aplicado sea un diff unificado con al menos una línea de contexto. Esto proporciona buenas medidas de seguridad, pero se descompone al aplicar un diff generado con --unified0. Para evitar estas comprobaciones, utilice --unidiff-zero. Tenga en cuenta que, por las razones expuestas anteriormente, se desaconseja el uso de parches sin contexto. Si utiliza alguna de las opciones marcadas Desactiva la aplicación, git apply lee y emite la información solicitada sin aplicar realmente el parche. Dé esta bandera después de esos indicadores para también aplicar el parche. Al aplicar un parche, ignore las adiciones hechas por el parche. Esto se puede utilizar para extraer la parte común entre dos archivos por primera vez dif en ellos y aplicar el resultado con esta opción, que se aplicaría la parte de eliminación, pero no la parte de adición. Históricamente no permitimos que el parche binario se aplicara sin un permiso explícito del usuario, y este indicador era la manera de hacerlo. Actualmente siempre permitimos la aplicación de parches binarios, por lo que este es un no-op. Don8217t aplica los cambios a los archivos que coinciden con el patrón de ruta de acceso dado. Esto puede ser útil al importar parches, donde desea excluir ciertos archivos o directorios. Aplique los cambios a los archivos que coincidan con el patrón de ruta de acceso dado. Esto puede ser útil cuando se importan conjuntos de parches, donde se desea incluir ciertos archivos o directorios. Cuando se utilizan los patrones --exclude y --include, se examinan en el orden en que aparecen en la línea de comandos y la primera coincidencia determina si se usa un parche en cada ruta. Un parche a una ruta que no coincide con ningún patrón de inclusión / exclusión se utiliza de forma predeterminada si no hay ningún patrón de inclusión en la línea de comandos, e ignorado si hay algún patrón de inclusión. Al aplicar un parche, ignore los cambios en el espacio en blanco en líneas de contexto si es necesario. Las líneas de contexto conservarán su espacio en blanco y no sufrirán la fijación de espacios en blanco independientemente del valor de la opción --whitespace. Sin embargo, las nuevas líneas serán fijas. Al aplicar un parche, detecte una línea nueva o modificada que tenga errores de espacio en blanco. Lo que se considera errores de espacio en blanco se controla mediante la configuración de core. whitespace. De forma predeterminada, los espacios en blanco de arrastre (incluidas las líneas que consisten exclusivamente en espacios en blanco) y un carácter de espacio que es seguido inmediatamente por un carácter de tabulación dentro del sangrado inicial de la línea se consideran errores de espacio en blanco. De forma predeterminada, el comando emite mensajes de advertencia pero aplica el parche. Cuando se utiliza git-apply para estadísticas y no se aplica un parche, el valor predeterminado es nowarn. Puede utilizar diferentes valores ltactiongt para controlar este comportamiento: nowarn desactiva la advertencia de espacio en blanco al final. Advertir advertencias de salidas de algunos de estos errores, pero aplica el parche tal cual (predeterminado). (Tira es un sinónimo --- la herramienta utilizada para considerar sólo los caracteres en blanco de arrastre como errores, y la solución implica despojarlos, pero Gits modernos hacer más). El error emite alertas para algunos de estos errores y se niega a aplicar el parche. Error-all es similar al error pero muestra todos los errores. En determinadas circunstancias, algunas versiones de diff no detectan correctamente una nueva línea que falta al final del archivo. Como resultado, los parches creados por dichos programas diff no registran las líneas incompletas correctamente. Esta opción agrega compatibilidad para aplicar dichos parches trabajando alrededor de este error. Informe el progreso a stderr. De forma predeterminada, solo se imprimirá un mensaje sobre el parche actual que se está aplicando. Esta opción hará que se informe de información adicional. No confíe en el recuento de líneas en los encabezamientos de la lista, pero infórmelo inspeccionando el parche (p. Ej. Después de editar el parche sin ajustar adecuadamente los encabezamientos de ficheros). Prepend ltrootgt a todos los nombres de archivo. Si también se pasó un argumento - p, se aplica antes de añadir la nueva raíz. Por ejemplo, un parche que habla de la actualización de / git-gui. sh a b / git-gui. sh se puede aplicar al archivo en los módulos de árbol de trabajo / git-gui / git-gui. sh ejecutando git apply - - directorymodules / git-gui. De forma predeterminada, se rechaza como un error (o un error) un parche que afecta fuera del área de trabajo (ya sea un árbol de trabajo controlado por Git o el directorio de trabajo actual cuando se aplica git como reemplazo del parche GNU). Cuando git apply se utiliza como un mejor parche GNU, el usuario puede pasar la opción --unsafe-paths para anular esta comprobación de seguridad. Esta opción no tiene ningún efecto cuando --index o --cached está en uso. Configuración Se establece para cambiar si desea que los cambios en el espacio en blanco se ignoren de forma predeterminada. Establezca uno de: no, ninguno, nunca, falso si desea que los cambios en espacios en blanco sean significativos. Cuando no se emite ningún indicador --whitespace desde la línea de comandos, este elemento de configuración se utiliza como valor predeterminado. Submódulos Si el parche contiene cambios en los submódulos, entonces git apply trata estos cambios de la siguiente manera. Si se especifica --index (explícita o implícitamente), entonces el submódulo comprometido debe coincidir con el índice exactamente para que el parche se aplique. Si alguno de los submódulos es retirado, entonces estos check-outs son completamente ignorados, es decir, no se requiere que estén actualizados o limpios y no se actualicen. Si no se especifica --index, se omite el submódulo que se confirma en el parche y se comprueba la ausencia o presencia del subdirectorio correspondiente y, si es posible, se actualiza. VÉASE TAMBIÉN Cómo resolver un conflicto de combinación para archivos binarios (por ejemplo, dos versiones de un. png) 45 pconrad Esta es una gran pregunta a la que debo comenzar con un par de puntos. Git no se sumerge en los cambios de archivos binarios de forma diferente a otros sistemas de control de versiones Git puede lanzar una herramienta de dif que entiende las imágenes (git difftool y git mergetool) El usuario todavía tiene muy poca probabilidad de ser capaz de fusionar los cambios dispares como binario Formatos como PNG simplemente no están bien diseñados para eso. He utilizado Araxis Merge para dif de algunas imágenes con un éxito modesto. El miembro del GitHub Training Team Me gustaría añadir que si estás en un conflicto de combinación de un binario, o incluso un documento de texto, puedes resolver rápidamente y eliminar la copia correcta deseada usando estos switches de opciones durante la resolución: git checkout --ours ltbinaryfilegt git checkout --los ltbinaryfilegtHow para resolver un conflicto de archivos binarios con Git Cuando se realiza una fusión en git. Puede ver el mensaje: En este escenario, somefile. dll es un archivo binario que se ha modificado tanto en la rama actual como en la rama a la que intenta combinar en la rama actual. Dado que el archivo no puede fusionarse textualmente, debe tomar una decisión: mantiene la versión del archivo en su sucursal actual o la versión en la otra. En TortoiseSVN, estaba acostumbrado a poder hacer clic con el botón derecho en el archivo en cuestión y elegir Resolver usando el mío o Resolver usando el suyo. Entonces, cuál es el equivalente git? Resolver usando el mío El archivo en su copia de trabajo sigue siendo la copia de su rama actual en otras palabras, no fue modificado por el intento de fusión. Para resolver el conflicto y mantener este archivo: Resolver usando el suyo Si prefiere resolver el conflicto usando su copia, necesita obtener la versión del archivo de la rama en la que estaba intentando combinar: Ahora que tiene la versión correcta de El archivo en su copia de trabajo, puede marcarlo como resuelto (añadiéndolo), y confirmar: Tenga en cuenta que en lugar de otherbranch. Puede usar cualquier nombre (treeish) que se refiera a una rama: un nombre de rama local (otherbranch), un nombre de rama remota (origen / master), un commit SHA específico (980e3cc), etc. Desde el mando a distancia cuando recibió el conflicto y desea resolverlo utilizando la versión remota, recuperaría esa copia del archivo utilizando: a continuación, agregue el archivo y confirme como se describe anteriormente. ACTUALIZACIÓN. Hay un acceso directo para obtener la copia de la otra rama (e incluso utiliza la terminología que esperaba): Esta entrada fue publicada en git. Marcar el permalink. Sigue cualquier comentario aquí con el feed RSS de esta publicación.


No comments:

Post a Comment