Git Merge Conflict Binário Opções


Você pode resolver conflitos de mesclagem usando a linha de comando e um editor de texto. Conflitos de mesclagem podem ocorrer se as alterações concorrentes são feitas para a mesma linha de um arquivo ou quando um arquivo é excluído que outra pessoa está tentando editar. Para obter informações sobre como resolver essas situações, consulte Competindo conflitos de mesclagem de alteração de linha e conflitos de mesclagem de arquivos removidos. Conflicto de conflitos de mesclagem de alteração de linha Para resolver um conflito de mesclagem causado por alterações de linha concorrentes, você deve escolher quais alterações incorporar dos diferentes ramos em um novo commit. Por exemplo, se você e outra pessoa editaram o arquivo styleguide. md nas mesmas linhas em diferentes ramos do mesmo repositório do Git, obterá um erro de conflito de mesclagem ao tentar mesclar esses ramos. Você deve resolver esse conflito de mesclagem com um novo commit antes de poder mesclar esses ramos. Abrir Terminal Terminal Git Bash. Navegue até o repositório Git local que possui o conflito de mesclagem. Gerar uma lista dos arquivos afetados pelo conflito de mesclagem. Neste exemplo, o arquivo styleguide. md tem um conflito de mesclagem. Abra seu editor de texto favorito, como o Atom. E navegue até o arquivo que tem conflitos de mesclagem. Para ver o início do conflito de mesclagem no seu arquivo, pesquise o arquivo para o marcador de conflito ltltltltltltlt. Quando você abre o arquivo em seu editor de texto, você verá as alterações do HEAD ou ramo base após a linha ltltltltltltlt HEAD. Em seguida, você verá. Que divide suas alterações das mudanças no outro ramo, seguido por gtgtgtgtgtgtgt BRANCH-NAME. Neste exemplo, uma pessoa escreveu abrir um problema na base ou filial HEAD e outra pessoa escreveu fazer a sua pergunta no IRC no ramo de comparação ou ramo-a. Decida se você quer manter apenas as alterações de seus ramos, mantenha apenas as mudanças de outros ramos ou faça uma mudança nova, que pode incorporar mudanças de ambos os ramos. Exclua os marcadores de conflito ltltltltltltlt. . Gtgtgtgtgtgtgt e faça as alterações desejadas na fusão final. Neste exemplo, ambas as alterações são incorporadas na junção final: Adicione ou defina suas alterações. Confirme suas alterações com um comentário. Agora você pode mesclar os ramos na linha de comando ou empurrar suas alterações para seu repositório remoto no GitHub e mesclar suas alterações em uma solicitação de solicitação. Conflitos de mesclagem de arquivos removidos Para resolver um conflito de mesclagem causado por alterações concorrentes em um arquivo, onde uma pessoa exclui um arquivo em um ramo e outra pessoa edita o mesmo arquivo, você deve escolher se deseja excluir ou manter o arquivo removido em um novo commit. Por exemplo, se você editou um arquivo, como README. md. E outra pessoa removeu o mesmo arquivo em outro ramo no mesmo repositório Git, você obterá um erro de conflito de mesclagem ao tentar mesclar esses ramos. Você deve resolver esse conflito de mesclagem com um novo commit antes de poder mesclar esses ramos. Abrir Terminal Terminal Git Bash. Navegue até o repositório Git local que possui o conflito de mesclagem. Gerar uma lista dos arquivos afetados pelo conflito de mesclagem. Neste exemplo, o arquivo README. md tem um conflito de mesclagem. Abra seu editor de texto favorito, como o Atom. E navegue até o arquivo que tem conflitos de mesclagem. Decida se deseja manter o arquivo removido. Você pode querer exibir as últimas alterações feitas no arquivo removido no seu editor de texto. Para adicionar o arquivo removido de volta ao seu repositório: Para remover este arquivo do seu repositório: Configure suas alterações com um comentário. Agora você pode mesclar os ramos na linha de comando ou empurrar suas alterações para seu repositório remoto no GitHub e mesclar suas alterações em uma solicitação de solicitação. Leitura adicionalEstou usando o Git no Windows (msysgit) para acompanhar as alterações de algum trabalho de design que eu venho fazendo. Hoje eu tenho trabalhado em um PC diferente (com rebo remoto brian) e Im agora tentando mesclar as edições feitas hoje de volta em minha versão local regular no meu laptop. No meu laptop, Ive usado git puxar brian mestre para puxar as alterações em minha versão local. Tudo estava bem além do documento principal do InDesign - isso mostra como um conflito. A versão no PC (brian) é a mais recente que eu quero manter, mas eu não sei o que comandos diz o repo para usar este. Eu tentei copiar diretamente o arquivo em meu laptop, mas isso parece quebrar todo o processo de mesclagem. Alguém pode me apontar na direção certa Zitrax Você fez o arquivo diff depois de executar git checkout - horas. A página do manual sugere (IMHO) que o checkout --ours - deles irá remover a alteração do quotboth modificado, necessidade mergequot lista e adicioná-lo ao índice, e eu acho que não está correto. Eu acredito que você precisará executar git add após o check-out. Ndash Tim Keating May 13 13 às 21:06 Você também pode superar esse problema com o que faz com que git para criar cópias locais do binário em conflito e spawn seu editor padrão sobre eles: Obviamente, você não pode editar arquivos úteis binários em um editor de texto. Em vez disso, copie o novo arquivo. REMOTE sem fechar o editor. Em seguida, quando você fechar o editor git verá que a cópia de trabalho undecorated foi alterado e seu conflito de mesclagem é resolvido da maneira usual. Se os arquivos são grandes ou você não deseja arriscar abrir um binário em um editor de texto, você pode pressionar ctrlc no prompt de mergetool (quot Hit retornar para iniciar a ferramenta de resolução de mesclar quot) e git deixará os arquivos extras no lugar. Em seguida, você pode modificá-los ou mesclá-los em uma ferramenta externa (útil para formatos de documento binário como LibreOfficeOpenOfficeMSWord) e salve o resultado de volta para o nome do arquivo original. Para informar ao git que o conflito foi resolvido, git adiciona o nome do arquivo original e você pode concluir o commit de mesclagem. Ndash Felix Aug 24 15 at 21:54 Para resolver mantendo a versão em seu ramo atual (ignore a versão do ramo que você está mesclando), basta adicionar e confirmar o arquivo: Para resolver, substituindo a versão em seu ramo atual com A versão do ramo que você está fundindo em, você precisa recuperar essa versão em seu diretório de trabalho em primeiro lugar e, em seguida, addcommit it: Ive se deparar com duas estratégias para gerenciar diffmerge de arquivos binários com o Git no Windows. Tortoise git permite configurar as ferramentas diffmerge para diferentes tipos de arquivos com base em suas extensões de arquivo. Ver 2.35.4.3. Configurações avançadas de DiffMerge tortoisegit. orgdocstortoisegittgit-dug-settings. html. Esta estratégia naturalmente relys sobre as ferramentas adequadas do diffmerge que estão disponíveis. Usando git atributos você pode especificar um toolcommand para converter o seu arquivo binário para o texto e, em seguida, deixar o seu padrão diffmerge ferramenta fazer a sua coisa. Veja git-scmbookitv2Customizing-Git-Git-Attributes. O artigo até dá um exemplo de usar metadados para imagens diff. Eu tenho duas estratégias para trabalhar com arquivos binários de modelos de software, mas fomos com tartaruga git como a configuração foi fácil. Resposta Se o binário é algo mais do que um dll ou algo que pode ser editado diretamente como uma imagem, ou um arquivo de mistura (e você não precisa trashselect um arquivo ou o outro) uma verdadeira fusão seria Alguns como: Sugiro pesquisar uma ferramenta diff orientada para o que você está arquivo binário, por exemplo, existem alguns livres para arquivos de imagem, por exemplo, e compará-los. Se não houver uma ferramenta de comparação lá fora para comparar seus arquivos, então se você tiver o gerador original do arquivo bin (ou seja, existe um editor para ele, como o blender 3d, então você pode inspecionar esses arquivos manualmente, Logs, e pergunte a outra pessoa o que você deve incluir) e fazer uma saída dos arquivos com git-scmbookesv2Git-Tools-Advanced-Mergingmanualremerge git show: 1: hello. blend gt hellomon. blend git show: 2: hello. blend gt O mecanismo de mesclagem (git merge e git pull comandos) permite que o back-end de mesclagem Estratégias a serem escolhidas com a opção - s. Algumas estratégias também podem ter suas próprias opções, que podem ser passadas por dar argumentos - Xltoptiongt para git merge andor git pull. Isso só pode resolver duas cabeças (ou seja, o ramo atual e outro ramo você puxado de) usando um algoritmo de mesclagem de 3 vias. Ele tenta detectar cuidadosamente ambigüidades de mesclagem cruzada e é considerado geralmente seguro e rápido. Isso só pode resolver duas cabeças usando um algoritmo de mesclagem de 3 vias. Quando há mais de um ancestral comum que pode ser usado para mesclar de 3 vias, ele cria uma árvore mesclada dos antepassados ​​comuns e usa isso como a árvore de referência para a mesclagem de 3 vias. Isso foi relatado para resultar em menos conflitos de mesclagem sem causar mismerges por testes feitos em compromissos de mesclagem real tomadas de Linux 2.6 história de desenvolvimento do kernel. Além disso, isso pode detectar e manipular fusões envolvendo renomeia. Essa é a estratégia de mesclagem padrão ao puxar ou mesclar um ramo. A estratégia recursiva pode ter as seguintes opções: Esta opção força os bits conflitantes a serem auto-resolvidos limpa, favorecendo nossa versão. As alterações da outra árvore que não conflitam com o nosso lado são refletidas para o resultado de mesclagem. Para um arquivo binário, todo o conteúdo é retirado do nosso lado. Isso não deve ser confundido com a nossa estratégia de fusão, que nem sequer olhar para o que a outra árvore contém em tudo. Ele descarta tudo o que a outra árvore fez, declarando que nossa história contém tudo o que aconteceu nele. Este é o oposto do nosso. Com essa opção, merge-recursive gasta um pouco de tempo extra para evitar mismerges que às vezes ocorrem devido a linhas de correspondência sem importância (por exemplo, chaves de funções distintas). Use isso quando os ramos a serem mesclados tiverem divergido. Veja também git-diff1 --patience. Diz merge-recursive para usar um algoritmo diff diferente, o que pode ajudar a evitar mismerges que ocorrem devido a linhas de correspondência sem importância (como chaves de funções distintas). Veja também git-diff1 --diff-algorithm. Ignore-space-change ignorar-todo-espaço ignore-space-at-eol Trata as linhas com o tipo de mudança de espaço indicado como inalteradas por uma fusão de três vias. As alterações de espaço em branco misturadas com outras alterações a uma linha não são ignoradas. Veja também git-diff1 - b. - W. E --ignore-space-at-eol. Se a sua versão apenas introduz alterações de espaço em branco para uma linha, a nossa versão é utilizada Se a nossa versão introduz alterações de espaço em branco, mas a sua versão inclui uma alteração substancial, a sua versão é utilizada Caso contrário, a intercalação procede da forma habitual. Isso executa um check-out virtual e check-in dos três estágios de um arquivo ao resolver uma fusão de três vias. Esta opção destina-se a ser usada quando se mescla ramos com diferentes filtros limpos ou regras de normalização de fim de linha. Consulte Agrupando ramos com diferentes atributos checkincheckout no gitattributes5 para obter detalhes. Desativa a opção renormalize. Isso substitui a variável de configuração merge. renormalize. Desativar a detecção de renomeação. Consulte também git-diff1 --no-renames. Ativar a detecção de renomeação, opcionalmente, definir o limite de similaridade. Esse é o padrão. Veja também git-diff1 --find-renames. Sinônimo desatualizado para find-renamesltngt. Esta opção é uma forma mais avançada de estratégia de subárvore, onde a estratégia faz uma suposição sobre como duas árvores devem ser deslocadas para combinar entre si ao mesclar. Em vez disso, o caminho especificado é prefixado (ou removido do início) para tornar a forma de duas árvores para corresponder. Isso resolve casos com mais de duas cabeças, mas se recusa a fazer uma mesclagem complexa que precisa de resolução manual. Ele é principalmente destinado a ser usado para agrupamento tópico ramo cabeças em conjunto. Essa é a estratégia de mesclagem padrão ao puxar ou mesclar mais de um ramo. Isto resolve qualquer número de cabeças, mas a árvore resultante da fusão é sempre a da cabeça de ramo atual, efetivamente ignorando todas as mudanças de todos os outros ramos. Ele se destina a ser usado para substituir a história de desenvolvimento de idade de ramos laterais. Observe que isso é diferente da opção - Xours para a estratégia de mesclagem recursiva. Esta é uma estratégia recursiva modificada. Ao mesclar as árvores A e B, se B corresponde a uma subárvore de A, B é primeiro ajustado para corresponder à estrutura em árvore de A, em vez de ler as árvores no mesmo nível. Este ajuste também é feito para a árvore ancestral comum. Com as estratégias que usam 3-way merge (incluindo o padrão, recursivo), se uma alteração é feita em ambos os ramos, mas posteriormente revertida em um dos ramos, essa mudança estará presente no resultado mesclado algumas pessoas acham este comportamento confuso . Isso ocorre porque somente os cabeçalhos e a base de mesclagem são considerados ao executar uma mesclagem, e não os compromissos individuais. Portanto, o algoritmo de mesclagem considera a alteração revertida como nenhuma alteração, e substitui a versão alterada. Este site de código aberto está hospedado no GitHub. Patches, sugestões e comentários são bem-vindos.

Comments