Em nossa equipe, usamos o Git como nosso controle de origem. Temos várias áreas de código quase independentes, mas com alguma sobreposição. Ultimamente, discutimos fluxos de trabalho e abordagens para usar o controle de origem. Uma reclamação que surge quando eu promovo o uso de um fluxo de trabalho da ramificação de recursos é que as pessoas geralmente enfrentam conflitos de mesclagem complicados que resolvem incorretamente. Por complicado, quero dizer "não é óbvio quanto a como resolver". À luz disso, outros fluxos de trabalho estão sendo usados mais ativamente, como um fluxo de trabalho baseado em "pull rebase".
Como defensor da abordagem do ramo de recursos, não estou realmente recebendo a reclamação. Sim, você precisa manter os ramos de recursos locais atualizados do mestre ou de qualquer outro lugar, mas esse é o único problema real que vejo. Estou pensando que, se suas fusões são sempre complicadas e podem ter efeitos secundários, isso é mais um problema de trabalho em equipe do que um problema do Git.
Estou correto em pensar isso? Os conflitos de mesclagem complicados são um sinal de algo bom ou ruim?
fonte
Respostas:
Não é impossível que o problema seja o seu código. Se a sua base de código tiver muitas inter-relações entre os módulos, todas as alterações terão tendrils em todos os lugares, e todos os desenvolvedores interagem com o código de qualquer outra pessoa, será um pesadelo.
Eu costumava pensar que você notaria isso de outras maneiras primeiro, mas é possível que você esteja tão acostumado a isso que não possa mais vê-lo.
fonte
Estou acostumado ao fluxo de trabalho "buscar-rebase-empurrar". Na verdade, é o primeiro fluxo de trabalho mais primitivo descrito em seu tutorial. Aqui estão as vantagens:
Agora, sobre conflitos de mesclagem complicados. Não entendo como é possível experimentar fusões frequentes e complicadas. A complicação decorre de não refazer a seleção por muito tempo, trabalhando nesse recurso por um mês.
Eu, pessoalmente, preferiria lidar com conflitos frequentes e fáceis de mesclar (na verdade, refazer a recuperação), em vez de um horror raro e abrangente.
fonte
Mesclagens e rebotes devem causar exatamente os mesmos conflitos, para aqueles conflitos inerentes que um ser humano deve resolver (ou seja, dois desenvolvedores alterando a mesma linha de código). Para outros conflitos, as mesclagens tendem a ser mais limpas, porque você não está alterando o SHA-1 de confirmações em todo o lugar. Não tenho certeza de como você está conseguindo entrar em um estado em que as fusões causam mais conflitos do que rebotes, mas é certamente um sinal de que o fluxo de trabalho de algumas pessoas está bagunçado e eles provavelmente precisam de mais treinamento sobre como o git funciona. Eles estão removendo os commits de mesclagem de outras pessoas quando realizam suas refazeres locais, ou algo assim?
O benefício e a desvantagem do método pull-rebase é muito semelhante aos fluxos de trabalho centralizados com os quais muitas pessoas estão acostumadas. Você não precisa entender a ramificação para usá-la.
De qualquer forma, é perfeitamente possível executar um fluxo de trabalho de ramificação de recursos apenas localmente, se você não conseguir que outras pessoas façam logon nele.
fonte
O projeto em que estou trabalhando apresenta esse tipo de problema de tempos em tempos e parece resultar de alguns fatores:
Estou interessado no potencial do Semantic Merge para ajudar com alguns desses problemas, mas obviamente isso é útil se você estiver trabalhando em um idioma que ele possa analisar e ainda não enfrentei nenhum desafio significativo quando eu ' estou usando, então não posso garantir sua eficácia.
fonte
A menos que os desenvolvedores estejam modificando confirmações históricas (em vez de mesclagens puras), os conflitos em um modelo git do tipo de fluxo de trabalho do recurso são um sinal de uma base de código fortemente acoplada (/ brandnew codebase) ou atribuição de recurso sobreposto.
fonte
Você tem uma ramificação principal (principal) e todos trabalham em suas ramificações de recursos.
O trabalho nas ramificações dos recursos pode levar de algumas horas a alguns meses.
De vez em quando alguém reverterá a mesclagem do seu changeset de volta ao ramo principal. O líder de sua equipe precisa garantir que apenas uma pessoa faça uma mesclagem inversa por vez. Uma vez feito isso, você precisará encaminhar a mesclagem da ramificação principal para a ramificação de recursos. Depois que todo mundo faz uma mesclagem direta, outra pessoa pode ter permissão para reverter a mesclagem na ramificação principal. Caso contrário, muitas alterações serão mescladas reversamente e você terá vários conflitos de mesclagem na mesclagem direta.
Apenas para esclarecer a terminologia, por "mesclagem reversa", quero dizer mesclar da ramificação do recurso na ramificação principal, e por "mesclagem direta", quero dizer mesclar da ramificação principal na ramificação do recurso. Com base no que já experimentei antes, é provável que você veja mais conflitos de mesclagem na mesclagem reversa, em oposição à mesclagem direta.
fonte
Duas coisas que podem ajudar: Primeiro, evite qualquer ferramenta que faça alterações por conta própria. Dois desenvolvedores que usam configurações diferentes de guias são uma receita para o desastre. Segundo, faça alterações em locais diferentes. Você tem um problema, por exemplo, se três desenvolvedores adicionarem código no final do mesmo arquivo - muito melhor se eles adicionarem código em lugares diferentes.
fonte