Fusão Git feita por estratégia recursiva
O mecanismo de mesclagem (git misge e git pull commands) permite que as "estratégias de mesclagem" do backend sejam escolhidas com a opção - s. Algumas estratégias também podem tomar suas próprias opções, que podem ser aprovadas ao dar - X & lt; option & gt; argumentos para combinar e / ou git pull.
Isso só pode resolver duas cabeças (ou seja, o ramo atual e outro ramo que você retirou) usando um algoritmo de mesclagem de 3 vias. Ele tenta detectar cuidadosamente as ambiguidades 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 antepassado comum que pode ser usado para a mesclagem 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 como resultado de menos conflitos de fusão sem causar mismerges por testes feitos em compromissos de fusão reais tirados do histórico de desenvolvimento do kernel do Linux 2.6. Além disso, isso pode detectar e manipular fusões envolvendo renomeações. Esta é 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 tipos de conflitos a serem automaticamente resolvidos, favorecendo a "nossa" versão. As mudanças da outra árvore que não estão em conflito com o nosso lado são refletidas no resultado de mesclagem. Para um arquivo binário, todo o conteúdo é retirado do nosso lado.
Isso não deve ser confundido com a estratégia de "nossa", que nem sequer olha o que a outra árvore contém. 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"; note que, ao contrário do "nosso", não há "deles" mescla a estratégia para confundir esta opção de fusão.
Com esta 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 fundidos divergiram de forma selvagem. Veja também git-diff [1] - paciência.
Diz a "fusão-recursiva" para usar um algoritmo de diferença diferente, o que pode ajudar a evitar mismerges que ocorrem devido a linhas de correspondência sem importância (como aparelhos de diferentes funções). Veja também git-diff [1] --diff-algorithm.
ignore-space-change ignore-all-space ignore-space-at-eol.
Trata as linhas com o tipo de mudança de espaço indicado como inalterada por causa de uma fusão de três vias. As mudanças de espaço em branco misturadas com outras alterações em uma linha não são ignoradas. Veja também git-diff [1] - b, - w e --ignore-space-at-eol.
Se a "sua" versão apenas introduzir mudanças de espaço em branco para uma linha, a "nossa" versão é usada;
Se a nossa versão introduzir mudanças no espaço em branco, a versão '' deles '' inclui uma alteração substancial, a 'sua' versão é usada;
Caso contrário, a fusão prossegue da maneira usual.
Isso executa um check-out virtual e check-in de todos os três estágios de um arquivo ao resolver uma mesclagem de três vias. Esta opção destina-se a ser usada quando mesclar ramos com diferentes filtros limpos ou regras de normalização de fim de linha. Consulte "Mesclando ramos com diferentes atributos check-in / checkout" em gitattributes [5] para detalhes.
Desativa a opção renormalize. Isso substitui a variável de configuração fusionar.
Desative a detecção de renomeação. Veja também git-diff [1] --no-renomeação.
Ativar a detecção de renomeação, opcionalmente, definir o limite de similaridade. Este é o padrão. Veja também git-diff [1] --find-renames.
Sinônimo desaprovado para find-renames = & lt; n & gt; .
Esta opção é uma forma mais avançada de estratégia "subárvore", onde a estratégia adivinha a forma como duas árvores devem ser deslocadas para combinar uma com a outra quando se fundem. Em vez disso, o caminho especificado é prefixado (ou despojado desde o início) para tornar a forma de duas árvores coincidir.
Isso resolve casos com mais de duas cabeças, mas se recusa a fazer uma fusão complexa que precisa de resolução manual. É principalmente destinado a ser usado para agrupar as cabeças de tópicos. Essa é a estratégia de mesclagem padrão ao puxar ou juntar mais de uma ramificação.
Isso resolve qualquer número de cabeças, mas a árvore resultante da mesclagem é sempre a da cabeça atual do ramo, ignorando efetivamente todas as mudanças de todos os outros ramos. É destinado a substituir o antigo histórico de desenvolvimento de filiais laterais. Observe que isso é diferente da opção - Xours para a estratégia de intercalação "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 coincidir com a estrutura em árvore de A, em vez de ler as árvores no mesmo nível. Este ajuste também é feito para a árvore-antepassada comum.
Com as estratégias que utilizam a fusão de 3 vias (incluindo o padrão, 'recursivo'), se uma alteração for feita em ambos os ramos, mas mais tarde será revertida em um dos ramos, essa mudança estará presente no resultado mesclado; Algumas pessoas acham esse comportamento confuso. Ocorre porque apenas as cabeças e a base de mesclagem são consideradas ao realizar uma mesclagem, e não o indivíduo comete. O algoritmo de mesclagem considera, portanto, a alteração revertida como nenhuma alteração, e substitui a versão alterada.
Fusão Git feita por estratégia recursiva
Obter através da App Store Leia esta publicação em nosso aplicativo!
Quais são as estratégias de fusão de git? [duplicado]
Quando git funde arquivos em que estou trabalhando, vejo:
Qual é exatamente a estratégia recursiva? Que outras estratégias existem (se houver)? E qual seria o benefício de usar um sobre o outro? Diferentes estratégias têm diferentes desempenhos? Ou duas estratégias diferentes podem resultar em resultados de mesclagem diferentes?
marcado como duplicado por Edward Thomson, t0mm13b, KatieK, Bohemian & # 9830; , Ram Kiran 10 de janeiro de 13 às 2:55.
Esta pergunta foi feita antes e já tem uma resposta. Se essas respostas não respondem totalmente a sua pergunta, faça uma nova pergunta.
МОДЕРАТОРЫ.
Bem-vindo ao Reddit,
a primeira página da internet.
e inscreva-se em uma das milhares de comunidades.
Это архивированный пост. Você está interessado em иолосовать или комментировать.
Quer adicionar à discussão?
помощь правила сайта центр поддержки вики реддикет mod guidelines связаться с нами.
приложенияи инструменты Reddit para iPhone Reddit para o site móvel Android кнопки.
Использование данного сайта означает, что вы принимаете & # 32; пользовательского соглашения & # 32; и & # 32; Политика конфиденциальности. &cópia de; 2017 reddit инкорпорейтед. Все права защищены.
REDDIT e o logotipo ALIEN são marcas registradas da reddit inc.
& pi; Renderizado pelo PID 113284 em & # 32; app-397 & # 32; 2017-12-19 20: 39: 16.477463 + 00: 00 executando o código do país 9e1524e: UA.
Fusão Git feita por estratégia recursiva
Obter através da App Store Leia esta publicação em nosso aplicativo!
Quando você usaria as diferentes estratégias de fusão de git?
Na página man no git-merge, existem várias estratégias de mesclagem que você pode usar.
resolver - Isso só pode resolver duas cabeças (ou seja, o ramo atual e outro ramo que você retirou) usando o algoritmo de mesclagem de 3 vias. Ele tenta detectar cuidadosamente as ambiguidades de mesclagem cruzada e é considerado geralmente seguro e rápido.
Recursivo - Isso só pode resolver duas cabeças usando o algoritmo de mesclagem de 3 vias. Quando há mais de um antepassado comum que pode ser usado para a fusão 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 como resultado de menos conflitos de mesclagem sem causar mis-merges por testes feitos em compromissos de fusão reais tirados do histórico de desenvolvimento do kernel do Linux 2.6. Além disso, isso pode detectar e manipular fusões envolvendo renomeações. Esta é a estratégia de mesclagem padrão ao puxar ou mesclar um ramo.
polvo - Isso resolve mais do que o caso de duas cabeças, mas se recusa a fazer uma fusão complexa que precisa de resolução manual. É principalmente destinado a ser usado para agrupar as cabeças de tópicos. Esta é a estratégia de mesclagem padrão ao puxar ou combinar mais de um ramo.
nosso - Isso resolve qualquer número de cabeças, mas o resultado da fusão é sempre a cabeça atual do ramo. É destinado a substituir o antigo histórico de desenvolvimento de filiais laterais.
subárvore - 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 coincidir com a estrutura em árvore de A, em vez de ler as árvores no mesmo nível. Este ajuste também é feito para a árvore-antepassada comum.
Quando devo especificar algo diferente do padrão? Para quais cenários os melhores?
Não estou familiarizado com a resolução, mas usei os outros:
Recursivo é o padrão para fusões não rápidas. Todos estamos familiarizados com esse.
Eu usei polvo quando eu tive várias árvores que precisavam ser mescladas. Você vê isso em projetos maiores, onde muitas filiais tiveram desenvolvimento independente e está tudo pronto para se juntar em uma única cabeça.
Um ramo de polvo combina várias cabeças em um commit, desde que possa fazê-lo de forma limpa.
Para ilustração, imagine que você tenha um projeto que tenha um mestre e, em seguida, três ramos para fundir em (chame-os a, b e c).
Uma série de fusões recursivas pareceria assim (note que a primeira fusão foi um avanço rápido, pois não forcei a recursão):
No entanto, uma única fusão de polvo ficaria assim:
O nosso == Eu quero puxar outra cabeça, mas jogar fora todas as mudanças que a cabeça introduz.
Isso mantém o histórico de um ramo sem nenhum dos efeitos do ramo.
(Leia: nem sequer olha para as mudanças entre esses ramos. Os ramos são apenas mesclados e nada é feito para os arquivos. Se você quer fundir no outro ramo e toda vez que há a pergunta "nossa versão de arquivo ou sua versão "você pode usar git merge - X nossa)
A subárvore é útil quando você quer mesclar em outro projeto em um subdiretório do seu projeto atual. Útil quando você tem uma biblioteca que você não deseja incluir como um submodulo.
Na verdade, as únicas duas estratégias que você gostaria de escolher são nossas se você quiser abandonar as mudanças trazidas por ramo, mas mantenha o ramo no histórico e a subárvore se você estiver mesclando o projeto independente no subdiretório do superprojeto (como 'git-gui' em ' git 'repositório).
O octopus Merge é usado automaticamente ao combinar mais de dois ramos. A resolução está aqui principalmente por razões históricas, e para quando você é atingido por casos de canto de estratégia de fusão recursiva.
"Resolve" vs estratégia de fusão "recursiva".
Recursivo é a atual estratégia padrão de duas cabeças, mas depois de algumas pesquisas, finalmente encontrei algumas informações sobre a estratégia de "resolver".
Originalmente, "resolver" era a estratégia padrão para fusões Git.
Em situações de fusão cruzada, onde há mais de uma possível base de mesclagem, a estratégia de resolução funciona assim: escolha uma das possíveis bases de mesclagem e espere o melhor. Isso na verdade não é tão ruim quanto parece. Muitas vezes, os usuários estão trabalhando em diferentes partes do código. Nesse caso, o Git detecta que está relembrando algumas mudanças que já estão em vigor e ignora as mudanças duplicadas, evitando o conflito. Ou, se estas são pequenas mudanças que causam conflito, pelo menos o conflito deve ser fácil para o desenvolvedor manipular.
Eu funcionei com sucesso árvores usando "resolver" que falhou com a estratégia recursiva padrão. Eu estava ficando fatal: git write-tree não conseguiu escrever erros na árvore, e graças a esta postagem no blog (mirror) tentei "-s resolve", que funcionou. Ainda não sei exatamente por quê. mas acho que foi porque eu tive mudanças duplicadas em ambas as árvores e resolvi as "ignoradas" adequadamente.
Obter através da App Store Leia esta publicação em nosso aplicativo!
Quando você usaria as diferentes estratégias de fusão de git?
Na página man no git-merge, existem várias estratégias de mesclagem que você pode usar.
resolver - Isso só pode resolver duas cabeças (ou seja, o ramo atual e outro ramo que você retirou) usando o algoritmo de mesclagem de 3 vias. Ele tenta detectar cuidadosamente as ambiguidades de mesclagem cruzada e é considerado geralmente seguro e rápido.
Recursivo - Isso só pode resolver duas cabeças usando o algoritmo de mesclagem de 3 vias. Quando há mais de um antepassado comum que pode ser usado para a fusão 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 como resultado de menos conflitos de mesclagem sem causar mis-merges por testes feitos em compromissos de fusão reais tirados do histórico de desenvolvimento do kernel do Linux 2.6. Além disso, isso pode detectar e manipular fusões envolvendo renomeações. Esta é a estratégia de mesclagem padrão ao puxar ou mesclar um ramo.
polvo - Isso resolve mais do que o caso de duas cabeças, mas se recusa a fazer uma fusão complexa que precisa de resolução manual. É principalmente destinado a ser usado para agrupar as cabeças de tópicos. Esta é a estratégia de mesclagem padrão ao puxar ou combinar mais de um ramo.
nosso - Isso resolve qualquer número de cabeças, mas o resultado da fusão é sempre a cabeça atual do ramo. É destinado a substituir o antigo histórico de desenvolvimento de filiais laterais.
subárvore - 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 coincidir com a estrutura em árvore de A, em vez de ler as árvores no mesmo nível. Este ajuste também é feito para a árvore-antepassada comum.
Quando devo especificar algo diferente do padrão? Para quais cenários os melhores?
Não estou familiarizado com a resolução, mas usei os outros:
Recursivo é o padrão para fusões não rápidas. Todos estamos familiarizados com esse.
Eu usei polvo quando eu tive várias árvores que precisavam ser mescladas. Você vê isso em projetos maiores, onde muitas filiais tiveram desenvolvimento independente e está tudo pronto para se juntar em uma única cabeça.
Um ramo de polvo combina várias cabeças em um commit, desde que possa fazê-lo de forma limpa.
Para ilustração, imagine que você tenha um projeto que tenha um mestre e, em seguida, três ramos para fundir em (chame-os a, b e c).
Uma série de fusões recursivas pareceria assim (note que a primeira fusão foi um avanço rápido, pois não forcei a recursão):
No entanto, uma única fusão de polvo ficaria assim:
O nosso == Eu quero puxar outra cabeça, mas jogar fora todas as mudanças que a cabeça introduz.
Isso mantém o histórico de um ramo sem nenhum dos efeitos do ramo.
(Leia: nem sequer olha para as mudanças entre esses ramos. Os ramos são apenas mesclados e nada é feito para os arquivos. Se você quer fundir no outro ramo e toda vez que há a pergunta "nossa versão de arquivo ou sua versão "você pode usar git merge - X nossa)
A subárvore é útil quando você quer mesclar em outro projeto em um subdiretório do seu projeto atual. Útil quando você tem uma biblioteca que você não deseja incluir como um submodulo.
Na verdade, as únicas duas estratégias que você gostaria de escolher são nossas se você quiser abandonar as mudanças trazidas por ramo, mas mantenha o ramo no histórico e a subárvore se você estiver mesclando o projeto independente no subdiretório do superprojeto (como 'git-gui' em ' git 'repositório).
O octopus Merge é usado automaticamente ao combinar mais de dois ramos. A resolução está aqui principalmente por razões históricas, e para quando você é atingido por casos de canto de estratégia de fusão recursiva.
"Resolve" vs estratégia de fusão "recursiva".
Recursivo é a atual estratégia padrão de duas cabeças, mas depois de algumas pesquisas, finalmente encontrei algumas informações sobre a estratégia de "resolver".
Originalmente, "resolver" era a estratégia padrão para fusões Git.
Em situações de fusão cruzada, onde há mais de uma possível base de mesclagem, a estratégia de resolução funciona assim: escolha uma das possíveis bases de mesclagem e espere o melhor. Isso na verdade não é tão ruim quanto parece. Muitas vezes, os usuários estão trabalhando em diferentes partes do código. Nesse caso, o Git detecta que está relembrando algumas mudanças que já estão em vigor e ignora as mudanças duplicadas, evitando o conflito. Ou, se estas são pequenas mudanças que causam conflito, pelo menos o conflito deve ser fácil para o desenvolvedor manipular.
Eu funcionei com sucesso árvores usando "resolver" que falhou com a estratégia recursiva padrão. Eu estava ficando fatal: git write-tree não conseguiu escrever erros na árvore, e graças a esta postagem no blog (mirror) tentei "-s resolve", que funcionou. Ainda não sei exatamente por quê. mas acho que foi porque eu tive mudanças duplicadas em ambas as árvores e resolvi as "ignoradas" adequadamente.
Comments
Post a Comment