Novo recurso no Git 3: encerramentos

Git é um sistema popular de controle de versão. No Git, uma alteração atômica de um ou vários arquivos é chamada de confirmação e várias confirmações consecutivas são combinadas em uma ramificação. As ramificações são usadas para implementar novas idéias (recursos).



Acontece que a idéia é um beco sem saída e o desenvolvedor mudou o caminho errado, então ele precisa reverter para a versão original. Ele deve esquecer o novo ramo, mudar para o principal desenvolvedor ou ramo principal e continuar trabalhando. Nesse caso, o "descendente" ficará para sempre, assim como o desejo de removê-lo. Mas como remover a parte da história? Este ramo mostra os esforços do programador trabalhador, mesmo que em vão. Portanto, será mais fácil relatar ao chefe, porque um resultado sem êxito também é um resultado!


Apresso-me a regozijar-se pelo fato de os desenvolvedores do Git apresentarem um novo comando para fechar essas ramificações "sem-teto" na terceira versão. A versão atual é 2.21.0 .


Como usar esse comando, quais benefícios ele oferece e o que as empresas de TI pensam? O artigo responde a essas e outras perguntas.


Descrição do produto


Agora é possível fechar uma ramificação malsucedida sobre uma das confirmações anteriores. Os arcos de fechamento são de cor amarela nas figuras abaixo.




O commit 4 é o último para o recurso malsucedido. Ele foi fechado sobre o commit 1 e, em seguida, retornamos ao mestre e seguimos o outro caminho (o commit 5 ).


Você também pode fechar um commit sobre si mesmo, criando loops :




Você pode fechar a ramificação sobre qualquer confirmação - o Git é inteligente, calcula as diferenças e mescla tudo corretamente:




Como usar?


O comando merge não inclui a funcionalidade de fechamentos, pois no primeiro caso a ramificação será acelerada e no segundo caso nada será feito (o git already up to date ).


Para não alterar o comportamento antigo, os desenvolvedores decidiram introduzir um comando de fechamento:


 git closure -s $source_commit -d $dest_commit -m $message 

O primeiro argumento -s $source_commit define o hash do commit a partir do qual você deseja estender o loop, e o segundo (opcional) -d $dest_commit define o commit no qual o loop será fechado. Se estiver ausente, o fechamento ocorrerá na agência de check-out atual. O argumento -m $message define uma mensagem de fechamento, como failed feature, revert to origin . No entanto, a opção --allow-empty-message também está disponível, o que permite confirmações sem mensagens. Por padrão, o Git permite apenas um fechamento para um par de confirmações. Para ignorar essa limitação, a opção --allow-multiple-closures está disponível.



Depois que o comando é executado, o Git calcula as alterações e, no commit final, um diff duplo será mostrado: a partir dos ramos base e de fechamento. No caso geral, é uma diferença n-dimensional, ou seja, pode haver quantos fechamentos você desejar. commit de fechamento é semelhante ao commit de mesclagem, com a única diferença de que ele contém várias mensagens, não uma.


Infelizmente, as GUIs do Git existentes não têm um bom suporte de fechamentos. A versão de visualização do GitExtensions exibe curvas de mesclagem em vez de arcos elegantes. Dê uma olhada nos novos campos, como Closure message Closure diff e Closure diff :



Vale a pena notar que o comando de closure sempre muda o histórico (como agora o Git é uma máquina do tempo completa!), Portanto, agora é possível enviar ramificações apenas com a opção --force ou a opção --force-with-lease safe opção de --force-with-lease .


A rebase também está disponível para ramificações em loop, embora a lógica para recalcular confirmações seja complicada.


Além disso, a opção automática permite o fechamento automático de todas as ramificações antigas. Nesse caso, a confirmação de fechamento é a que inicia a ramificação. Com os plugins Git IDE, os fechamentos podem ser executados periodicamente. No GitExtensions, existe um plug-in semelhante. Excluir ramificações obsoletas .


O que as empresas de TI pensam


Grandes empresas de TI: Google, Facebook, Apple, DeepMind, Positive Technologies e, especialmente, Microsoft, aguardam ansiosamente o fechamento, porque agora será possível formalizar o ciclo de vida das filiais, incluindo as não imersas.


Um dos principais gerentes da Microsoft, Michael Richter, escreveu :


O novo recurso do Git, é claro, reduzirá o caos no mundo do desenvolvimento de código aberto (e não apenas). Existem muitas ramificações "penduradas" em nossos repositórios. Por exemplo, no vscode , temos mais de 200 deles e no TypeScript mais de 300! E esse problema não é apenas nosso. Os fechamentos não apenas melhoram a organização, mas também possibilitam acompanhar o raciocínio do programador, às vezes completamente incompreensível até para os colegas :) Os fechamentos me lembraram o filme "De volta ao futuro", onde os personagens viajavam para o passado e o futuro. Eu gosto deste filme, eu assisti várias vezes. E acho que vou amar ainda mais o Git, porque se esse recurso :)

Nota


Se anteriormente o gráfico de confirmações era um gráfico acíclico direcionado (DAG), os fechamentos estendiam-no para um gráfico direcionado geral. Usando o Git, você pode descrever expressões regulares nas quais os estados são confirmados e o alfabeto é o conjunto de todas as mensagens. Mas este é o tópico do hub "Programação anormal" e, portanto, vai além do escopo deste artigo. No entanto, se isso lhe parecer interessante, confira o artigo sobre como armazenar árvores genealógicas no Git.

Source: https://habr.com/ru/post/pt445680/


All Articles