Por que você não confirmava alterações mescladas imediatamente?

16

Meu escritório usa Git e SourceTree para nosso controle de versão. Isso aconteceu porque quando entrei havia zero controle de versão e o SourceTree era o único sistema que eu já havia usado. Eu não sou um especialista de forma alguma, mas sou o mais experiente dos meus colegas de trabalho, por isso sou o especialista de fato responsável por ensinar a todos a usar o Git corretamente e corrigir os erros que estão cometendo.

Estou fazendo um documento tutorial que passa pelo Git e SourceTree e explica todas as etapas do processo. No processo Pull, a caixa de diálogo SourceTree permite selecionar a opção "Confirmar alterações mescladas imediatamente". Eu entendo o que isso faz e por que é útil. O que eu não entendo é por que alguém não gostaria de usar esse recurso.

Alguém poderia explicar por que você nunca gostaria que suas alterações mescladas fossem confirmadas automaticamente? Estou tentando entender o raciocínio para poder explicar melhor a utilidade do recurso e ter uma idéia de quais armadilhas devem ser observadas no futuro.

Editar: não acredito que minha pergunta seja uma duplicata da pergunta vinculada. A questão vinculada está perguntando amplamente com que frequência se comprometer. Estou perguntando por que alguém escolheria não usar um recurso específico relacionado ao comprometimento de mesclagens no SourceTree.

David K
fonte
1
Você quer boas razões? Porque eu posso fornecer uma variedade de razões para atrasar a verificação do código que ouvi pessoas dizerem na natureza, mas poucas delas são boas razões.
Whatsisname
A única razão pela qual consigo pensar é quando uma mesclagem falha devido a conflitos de mesclagem. Mas o SourceTree não confirmará se isso acontecer de qualquer maneira.
Robert Harvey
Em uma nota lateral: Por que você está escrevendo seu próprio tutorial? O bitbucket já tem um ótimo tutorial. confluence.atlassian.com/bitbucket/...
winkbrace
@winkbrace Não estamos usando o Bitbucket; mantemos tudo em uma rede local. Eu refiro o ótimo tutorial do Atlassian , mas queria algo um pouco mais conciso que pudesse entregar a pessoas que eram novinhas no Git e controle de versão. É realmente mais uma introdução e procedimento "é assim e por que você comete / empurra / empurra / etc" para que as pessoas possam começar a correr.
David K

Respostas:

26

Eu não gostaria de usar esse recurso.

O fato de não haver conflitos significa que as alterações que estão sendo mescladas em minha ramificação não estão aproximadamente nas mesmas linhas de código que as que eu fiz. Isso não significa que essas alterações são compatíveis com as minhas alterações. Isso não significa que o código será compilado, ou que o código funcionará, ou que os testes serão aprovados.

Em outras palavras, ao usar esta opção, eu acabo potencialmente com um commit espúrio de código que pode não estar em bom estado e requer um novo commit para corrigir. Como estou fazendo esse trabalho de qualquer maneira, e como nunca devo enviar esse commit espúrio a montante, nem mesmo por engano (Deus me livre, alguém pode então mesclar isso em algum outro ramo!), Não vejo razão para criar esse commit no primeiro Lugar, colocar.


fonte
Presumivelmente, você está criando ramificações de recursos e não mesclando todas as pequenas alterações na ramificação principal. É improvável que as mesclagens causem conflitos em uma ramificação de recurso, a menos que várias pessoas estejam trabalhando na mesma classe na mesma ramificação de característica.
Robert Harvey
4
@RobertHarvey Sim, mas presumo que frequentemente mesclo o ramo principal ao meu ramo. Há um pressuposto oculto no seu comentário de que diferentes recursos tocam naturalmente diferentes classes / módulos, mas nem todos têm sorte. Por (mis) fortuna, você tem uma classe de Deus em algum lugar que todo mundo que faz alguma coisa precisa tocar, e você não pode fazer muito a respeito. Além disso, existem recursos transversais (atualize algumas bibliotecas por causa de quais das 10 linhas de código precisam ser alteradas ...) Conheço o argumento "tente não chegar lá", mas e se você já estiver lá? Melhor prevenir do que remediar.
2

Após uma mesclagem, pode haver alterações nos arquivos no repositório local. Essas alterações não são confirmadas automaticamente no local, a menos que você defina "Confirmar alterações mescladas imediatamente".

Se você não definir essa opção, os arquivos aparecerão no SourceTree como alterações não confirmadas.

Isso ocorre porque o próprio Git não confirma, a menos que você o explique explicitamente, e o SourceTree é uma GUI do Git. O "Commit mudanças incorporadas imediatamente" opção não é tanto uma opção, já que é um atalho de comando.

Portanto, o motivo para não querer usar esse recurso é evidente: você deseja executar a confirmação manualmente ou não.

Digamos que você puxe o mestre para o seu ramo de recursos. Um colega de trabalho está trabalhando em um ramo de recurso diferente. Este colega de trabalho tem um histórico de quebrar coisas. A mesclagem contém alterações no código comum compartilhado feitas por esse colega de trabalho. Portanto, você - junto com o restante da equipe - não comete alterações mescladas até ter certeza de que não há alterações feitas por esse colega de trabalho que afetarão seu trabalho.

Só porque não há uma boa razão - em teoria - para não usar esse recurso, na realidade, pode haver várias boas razões. No que diz respeito ao seu tutorial, eu diria apenas que "99 vezes em 100, esta é a opção que você deseja usar". Eu não acho que você realmente precise entrar em detalhes sobre não usá-lo, especialmente se os outros são novos no controle de versão. Tudo isso depende de quão profundo você pretende que o tutorial seja.

Mark Benningfield
fonte
2

Se você estiver usando um gancho de confirmação de postagem para enviar automaticamente suas confirmações (como em /programming//a/7925891/6781678 ), poderá ser necessária esta opção para evitar enviar alguma confirmação de qualidade duvidosa.

Eu nunca usaria também.

Philippe
fonte