Quando eu estiver pronto para mesclar meu ramo de volta ao desenvolvimento (grifo meu)
Lidar com conflitos git merge
geralmente é mais simples que em git rebase
. No Git merge, você pode ver toda a lista de arquivos que foram modificados ao mesmo tempo. Não importa quantas confirmações foram feitas por outros colegas de trabalho, você precisará mesclar uma vez . Com o rebase do fluxo de trabalho, você pode acabar enfrentando os mesmos conflitos várias vezes e precisar revê-los manualmente. Você pode corrigir o 13º commit e sentir que não pode ver a luz saindo do túnel .
Pela minha experiência, quando tentei resolver ingenuamente conflitos repetidos de rebase, acabei perdendo as modificações de alguém ou com um aplicativo que nem sequer foi compilado. Frequentemente, eu e colegas de trabalho realizamos muito trabalho, mas ficamos tão sobrecarregados com a complexidade de repetir conflitos que tivemos que abortar e perder nosso trabalho anterior depois de algumas punições de rebase.
Vou sugerir algumas técnicas, mas elas só podem ajudar a mesclar a ficar mais fácil do que automatizar a tarefa.
- Arquivos de recurso / idioma . Se você tem aditivos alterações em um arquivo de recurso, certifique-se sempre movê-los para o fim do arquivo para que você possa facilmente recordar as suas alterações contra outras mudanças '. Você pode copiar e colar suas alterações na parte inferior ou apenas remover os marcadores de conflito
- Faz. Não. ABSOLUTAMENTE. Formato RE . Nem você nem seus colegas desenvolvedores devem executar uma "reformatação maciça de código" durante o trabalho diário. A reformatação de código adiciona um número excessivo de falsos positivos no gerenciamento de conflitos. A reformatação de código pode ser feita
- Incrementalmente, por exemplo, por todos os desenvolvedores em todas as confirmações, assim que eles usam uma ferramenta automatizada (por exemplo, o Eclipse tem a opção de reformatar ao salvar, o Visual Studio da baunilha não possui). Absolutamente todo desenvolvedor deve usar os mesmos padrões de formatação de código, codificados em um arquivo de formato que é consumido pelo seu IDE. Para se ter uma idéia, se são 4 espaços ou 2 guias, não importa, mas realmente importa se todos usam o mesmo.
- Pouco antes do lançamento, por um líder de equipe. Se uma confirmação de "reformatação de código" ocorrer quando as pessoas não estiverem trabalhando em ramificações, ou seja, antes de ramificar, as coisas ficarão mais fáceis
- Analise a divisão do trabalho entre colegas de trabalho. Essa é a parte em que a maior parte da engenharia vem. Como apontado por outras respostas, é cheiro de design se vários desenvolvedores que executam tarefas diferentes precisam tocar nos mesmos recursos. Pode ser necessário discutir com o líder da equipe qual parte será modificada por cada desenvolvedor simultâneo.
Também vi alguns maus hábitos nos fluxos de trabalho do Git em minhas equipes. Muitas vezes, as pessoas se comprometem demais com seus ramos. Eu pessoalmente testemunhei um desenvolvedor adicionando de 10 a 20 confirmados rotulados como "correção", cada um comprometendo uma ou duas linhas. Nossa política é que os commits sejam rotulados com tickets JIRA para que você tenha uma idéia.
@JacobRobbins sugere fazer git rebase
uma tarefa diária. Eu gostaria de levar sua abordagem adiante.
Primeiro, use rebase uma vez apenas para reduzir o número de confirmações para um punhado. E rebase apenas no ramo de desenvolvimento original , que é o commit do qual você ramificou. Quando digo algumas, posso dizer 3 ou 4 (por exemplo, todo o front end, todo back-end, todos os patches do banco de dados) ou qualquer figura humanamente razoável. Depois de consolidá-los, use fetch
e trabalhe sua rebase na ramificação upstream. Isso não salvará você de conflitos, a menos que sua equipe revise sua própria abordagem, mas tornará sua vida menos dolorosa.
Se você tiver perguntas adicionais sobre tarefas específicas, fique à vontade para pesquisar e perguntar no Stackoverflow.
[Editar] sobre a regra de não reformatação e escoteiro. Reformulei um pouco o formato RE para destacar que o que quero dizer é a tarefa de formatar do zero todo o arquivo de origem, incluindo o código que não foi tocado por você. Ao contrário de sempre formatar seu próprio código, que é perfeitamente desprezível, vários desenvolvedores, inclusive eu, são usados para reformatar o arquivo inteiro com os recursos do IDE. Quando o arquivo é tocado por outras pessoas, mesmo que as linhas afetadas não sejam alteradas em seu conteúdo e semântica, o Git o verá como um conflito. Somente um editor com reconhecimento de idioma muito poderoso pode sugerir que o conflito está relacionado apenas à formatação e mesclagem automática do fragmento melhor formatado. Mas não tenho evidências de tal ferramenta.
Afinal, a regra dos escoteiros não exige que você limpe a bagunça de outras pessoas. Apenas seu.