Git é um sistema popular de controle de versão. Nele, a alteração atômica de um ou mais 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 ideia acaba sendo um beco sem saída, o desenvolvedor desliga da maneira errada e é necessário reverter para a versão original, para isso você precisa esquecer o novo ramo e mudar para o desenvolvedor ou mestre principal e continuar trabalhando como se nada tivesse acontecido. Nesse caso, o "tiro" ficará suspenso para sempre, como o desejo de removê-lo. Mas como excluir se faz parte da história? Este processo mostra os esforços do programador viciado em trabalho, embora em vão. É mais fácil relatar às autoridades, porque um resultado sem êxito também é um resultado!
Apresso-me a agradar: os desenvolvedores do Git na versão 3 introduzirão um novo comando para fechar esses desvios perdidos. Deixe-me lembrá-lo de que a versão atual atual é 2.21.0 .
Como usar essa equipe, o que ela oferece e o que as empresas de TI pensam? O artigo responde a essas e outras perguntas.
Descrição do produto
Agora você pode fechar uma ramificação sem êxito com uma das confirmações anteriores. Os arcos da falha são amarelos nas figuras abaixo.
Aqui o commit 4
é o último para um recurso malsucedido. Ele foi fechado de 1
e, em seguida, retornou ao mestre e seguiu o caminho contrário, a partir do commit 5
.
Você também pode bloquear o commit em si mesmo, criando loops :
Você pode se prender a qualquer commit - o Git inteligente calculará a diferença e combinará tudo corretamente:
Como usar?
O comando merge
não contém a funcionalidade de fechamento, pois, no primeiro caso, o ramo será forjado rapidamente e , no segundo, não fará nada (o git already up to date
).
Para não alterar o comportamento antigo, os desenvolvedores decidiram inserir um comando para fechar:
git closure -s $source_commit -d $dest_commit -m $message
O primeiro argumento para -s $source_commit
define o hash do commit do qual efetuar o loop, e o segundo opcional -d $dest_commit
define o commit do loop para fechar. Se estiver ausente, o fechamento ocorrerá na agência de check-out atual. O parâmetro -m $message
define a mensagem de fechamento, como o failed feature, revert to origin
. No entanto, a opção --allow-empty-message
também está disponível, o que permite confirmações sem o texto da mensagem. Por padrão, o Git permite exatamente um fechamento para algumas confirmações. Para contornar essa limitação, a opção --allow-multiple-closures
.
Após a execução do comando, o próprio git calculará as alterações e, no commit final, o diff duplo será visível: a partir da base e dos ramos finais. Em geral, essa é uma diferença n-dimensional, ou seja, você pode executar o fechamento quantas vezes quiser. commit de fechamento é semelhante ao commit de mesclagem, com a diferença de que ele armazena várias mensagens, não uma.
Infelizmente, as GUIs existentes para trabalhar com o Git ainda não oferecem suporte completo a fechamentos. A versão de visualização do GitExtensions cria curvas como uma mesclagem em vez de um belo arco. Observe os novos campos Closure message
Closure diff
e Closure diff
:
Vale ressaltar que a equipe de closure
sempre muda o histórico (agora, agora o Git é uma máquina do tempo completa!), Agora você pode --force
ramificações apenas com a opção --force
ou com a opção --force-with-lease
segura.
Rebases para ramificações com loops também estão disponíveis, no entanto, a lógica para recontar confirmações nelas é complicada.
Além disso, a opção auto
permite fechar automaticamente todos os ramos antigos. Nesse caso, o commit de fechamento é aquele a partir do qual a ramificação começou. Usando plugins para o Git IDE, os fechamentos podem ser executados periodicamente. No GitExtensions, um plug-in Excluir ramificações obsoletas semelhante remove ramificações obsoletas.
Opinião de empresas de TI
Grandes empresas de TI: Google, Facebook, Apple, DeepMind, Positive Technologies e especialmente Microsoft, estão ansiosas pelo fechamento, porque agora será possível formalizar o ciclo de vida das filiais, incluindo as não-contíguas.
Um dos principais gerentes da Microsoft, Michael Richter, escreve :
O novo recurso do git certamente reduzirá o caos no mundo do desenvolvimento de código aberto e não apenas. Nossos repositórios têm muitas ramificações pendentes. Por exemplo, existem mais de 200 no vscode e mais de 300 no TypeScript ! E este não é apenas o problema da Microsoft. Os fechamentos não apenas melhoram a organização, mas também permitem que você acompanhe 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 viajaram para o passado e o futuro. Eu amo este filme, eu o revi várias vezes. E acho que vou amar o git por causa disso ainda mais :)
Nota
Se anteriormente o gráfico de confirmação era um gráfico acíclico direcionado (DAG), os fechamentos estendiam-no para um gráfico direcionado generalizado. Com o Git, será possível descrever expressões regulares nas quais os estados são confirmados e o alfabeto é o conjunto de todas as mensagens. Mas isso cheira a "programação anormal" do hub e, portanto, está além do escopo do artigo. No entanto, se você estiver interessado nisso, consulte o artigo que descreve como armazenar árvores genealógicas no Git.