Translate

Mostrar mensagens com a etiqueta Merge. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Merge. Mostrar todas as mensagens

segunda-feira, 9 de maio de 2022

GIT - O Que Todo Programador COBOL Padawan Precisa Saber Sobre Controle de Versão Profissional na Era da Inteligência Artificial, DevOps e IBM Mainframe

 

Bellacosa Mainframe muito alem do git commit

☕ Um Café no Bellacosa Mainframe

Git Muito Além do git commit

O Que Todo Programador COBOL Padawan Precisa Saber Sobre Controle de Versão Profissional na Era da Inteligência Artificial, DevOps e IBM Mainframe

"Existe uma enorme diferença entre saber usar comandos do Git e compreender como o Git realmente pensa. É exatamente essa diferença que separa um programador que apenas grava código de um engenheiro de software capaz de colaborar em projetos globais."


Introdução

Recentemente encontrei uma imagem bastante interessante intitulada "Top 20 Git Commands Every Developer Should Know". À primeira vista, ela parece apenas mais um resumo para consulta rápida.

Ela lista comandos como:

  • git init

  • git clone

  • git add

  • git commit

  • git push

  • git pull

e muitos outros.

Para um desenvolvedor iniciante, essa imagem parece representar praticamente todo o universo do Git.

Mas existe um detalhe importante.

Ela mostra o volante, o acelerador e o freio.

Ela não mostra o motor.

E quem trabalha com sistemas críticos — especialmente quem vem do universo IBM Mainframe — sabe que entender somente os comandos nunca foi suficiente.

No mundo do z/OS não basta decorar:

IEFBR14

É preciso entender:

  • JES2

  • Address Space

  • Dispatching

  • Storage

  • Dataset Catalog

  • VSAM

  • RACF

  • SMF

  • WLM

Da mesma forma, no Git não basta decorar comandos.

É preciso entender a arquitetura.

Hoje vamos tomar um café e mergulhar no funcionamento interno do Git.


Git não é apenas um programa

O Git é um Sistema Distribuído de Controle de Versão (Distributed Version Control System - DVCS).

Essa definição parece simples.

Mas ela muda completamente a forma como o desenvolvimento acontece.

Antes do Git existiam ferramentas como:

  • CVS

  • SourceSafe

  • SVN

Todas eram centralizadas.

Imagine um servidor.

Servidor

     Projeto

Todos os desenvolvedores dependiam dele.

Se o servidor parasse...

Ninguém trabalhava.

Se a rede caísse...

Ninguém fazia commit.


O Git mudou completamente essa arquitetura

Quando você executa:

git clone

Você não baixa apenas os arquivos.

Você baixa:

  • todos os commits

  • todas as branches

  • todas as tags

  • todo o histórico

Na prática, você cria um espelho completo do repositório.

É como se cada desenvolvedor carregasse um mini GitHub dentro do notebook.


Fazendo uma analogia com o Mainframe

Imagine um enorme PDS onde vivem todos os programas COBOL.

Agora imagine que cada desenvolvedor possui uma cópia completa daquele PDS, incluindo todas as versões desde a criação do sistema.

É exatamente isso que o Git faz.

Só que muito melhor.


A pasta mais importante do projeto

Quando executamos:

git init

Algo aparentemente simples acontece.

É criada uma pasta escondida.

.git

Muitos iniciantes ignoram essa pasta.

Grande erro.

É nela que mora todo o Git.

Se ela desaparecer...

O histórico desaparece.

Os commits desaparecem.

As branches desaparecem.

As tags desaparecem.

O projeto volta a ser apenas uma pasta comum.


O que existe dentro da pasta .git?

Normalmente encontramos algo parecido com isto:

.git

objects

refs

HEAD

config

hooks

logs

index

packed-refs

Cada item possui uma função específica.


objects

É o verdadeiro banco de dados do Git.

Tudo fica aqui.

Arquivos.

Commits.

Branches.

Trees.

Tags.

Tudo.


refs

São os ponteiros.

Eles dizem onde cada branch está.


HEAD

É o famoso ponteiro atual.

Sempre indica onde você está trabalhando.


config

Contém toda configuração local.

Usuário.

Email.

Remotos.

Aliases.


hooks

Automação.

Podemos executar scripts antes de:

  • commit

  • push

  • merge

Muito usado em DevOps.


O Git não salva diferenças

Essa talvez seja a maior surpresa para quem começa.

Muitos acreditam que o Git grava apenas as linhas modificadas.

Não.

Ele trabalha principalmente com snapshots.

Imagine um diretório.

Projeto

Programa1.cbl

Programa2.cbl

JCL1.jcl

README.md

Quando fazemos:

git commit

O Git registra um retrato completo daquele momento.

Como uma fotografia.

Não apenas um patch.

Isso torna a recuperação extremamente eficiente.


Os quatro tipos de objetos do Git

O banco interno do Git possui apenas quatro tipos fundamentais.

Blob

Representa o conteúdo de um arquivo.

Não conhece nomes.

Não conhece diretórios.

Conhece apenas bytes.


Tree

Organiza os blobs.

Funciona como um diretório.


Commit

Liga uma árvore ao histórico.

Contém:

  • autor

  • data

  • mensagem

  • commit anterior


Tag

Marca um commit especial.

Normalmente versões:

v1.0

v2.0

Release-2026

SHA: a identidade única de tudo

Cada objeto recebe um hash.

Exemplo:

c83f92b15c4...

Esse hash é calculado sobre o conteúdo.

Se um único byte mudar...

Todo o hash muda.

Essa característica garante integridade.


Os três estados dos arquivos

Esse é provavelmente o conceito mais importante do Git.

Todo arquivo percorre três etapas.

Working Directory

↓

Staging Area

↓

Repository

Working Directory

É onde editamos.

Abrimos o COBOL.

Mudamos um SELECT.

Alteramos um PERFORM.

Ainda não existe histórico.


Staging Area

É uma área intermediária.

O comando:

git add

Não grava nada.

Ele apenas prepara.

É como colocar documentos sobre a mesa antes de arquivá-los.


Repository

Somente quando executamos:

git commit

O histórico realmente nasce.


Git Status

Se existisse apenas um comando obrigatório seria:

git status

Ele responde perguntas como:

  • O que mudou?

  • O que será enviado?

  • O que ainda não entrou no commit?

Executar esse comando diversas vezes ao longo do dia é uma excelente prática.


Git Add

Existe uma diferença enorme entre:

git add arquivo.cbl

e

git add .

O primeiro adiciona apenas um arquivo.

O segundo adiciona praticamente tudo.

Isso inclui arquivos temporários.

Logs.

Arquivos de configuração.

Até senhas esquecidas.

Daí nasce a importância do:

.gitignore

Git Ignore

Imagine esquecer dentro do projeto:

senha.txt

backup.zip

log.txt

database.db

Sem o .gitignore, tudo isso pode ir para o repositório.

Alguns vazamentos famosos de credenciais ocorreram exatamente por causa disso.


Commits são sua documentação

Existe um velho hábito ruim.

Update

Outro.

Correções

Outro.

Mudanças

Meses depois...

Ninguém sabe o que foi alterado.

Uma boa mensagem explica a intenção.

Por exemplo:

Valida CPF antes da gravação no DB2

ou

Corrige cálculo do IOF para operações acima de R$ 50.000

Muito mais útil.


Branches: linhas paralelas de desenvolvimento

Imagine um banco.

Enquanto uma equipe trabalha no PIX...

Outra trabalha no Open Finance.

Outra corrige produção.

Tudo ao mesmo tempo.

Isso só é possível porque existem branches.

main

├── feature-pix

├── feature-openfinance

└── hotfix

Cada equipe trabalha isoladamente.


Merge

Quando uma funcionalidade termina:

feature-pix

ela precisa voltar para:

main

É aqui que entra o:

git merge

Ele une dois históricos.


Conflitos

Imagine dois desenvolvedores alterando a mesma linha.

Um escreve:

MOVE ZERO TO WS-TOTAL.

Outro escreve:

MOVE WS-VALOR TO WS-TOTAL.

Quem está certo?

O Git não decide.

Ele apresenta:

<<<<<<<
=======
>>>>>>>

E cabe ao desenvolvedor resolver.


Fetch versus Pull

Muitos iniciantes acreditam que são iguais.

Não são.

git fetch

Baixa novidades.

Mas não altera seu trabalho.

Já:

git pull

Baixa e integra imediatamente.

É praticamente:

fetch

+

merge

Em projetos críticos, muitos profissionais preferem primeiro:

git fetch

Analisar.

Depois integrar.


Push

Sem ele ninguém verá seu trabalho.

git push

Envia seus commits ao servidor.

É a promoção do desenvolvimento local para o repositório compartilhado.


Git Diff

Antes de qualquer commit execute:

git diff

Você verá exatamente:

-

+

Tudo que será enviado.

Isso evita inúmeros erros.


Git Stash

Imagine este cenário.

Você está desenvolvendo uma API.

Surge uma emergência em produção.

Você ainda não pode fazer commit.

O que fazer?

git stash

Ele guarda temporariamente tudo.

Depois:

git stash pop

Seu trabalho retorna exatamente como estava.


Git Reset

Esse comando merece respeito.

Especialmente:

git reset --hard

Ele pode apagar alterações locais sem possibilidade simples de recuperação.

Não é um comando para testar.

É um comando para compreender profundamente antes de usar.


O verdadeiro poder das branches

No Git, uma branch é extremamente leve.

Ela não copia o projeto.

Ela cria apenas um ponteiro.

Por isso podemos criar dezenas ou centenas delas.


O Git e o DevOps

Hoje praticamente toda pipeline utiliza Git.

Por exemplo:

Commit

↓

GitHub

↓

GitHub Actions

↓

Build

↓

Testes

↓

Deploy

↓

Produção

Sem Git praticamente não existe DevOps moderno.


GitHub não é Git

Outro erro muito comum.

Git é uma tecnologia.

GitHub é um serviço.

Também existem:

  • GitLab

  • Bitbucket

  • Azure DevOps

  • Gitea

  • Forgejo

Todos utilizam Git.


Git e Inteligência Artificial

Ferramentas como:

  • GitHub Copilot

  • ChatGPT

  • Claude

  • Gemini

podem escrever código.

Mas todas dependem de algo extremamente importante.

Histórico.

Contexto.

Versionamento.

Quando uma IA gera uma alteração, ela precisa ser rastreável.

Quem alterou?

Quando?

Por quê?

Qual problema resolveu?

Git responde todas essas perguntas.


Git no universo IBM Mainframe

Durante muitos anos o desenvolvimento Mainframe utilizou ferramentas como:

  • Endevor

  • Changeman

  • Librarian

  • Panvalet

Hoje muitas empresas estão integrando esses ambientes ao Git.

Isso permite:

  • CI/CD

  • Pull Requests

  • Code Review

  • Integração com Jenkins

  • GitHub Actions

  • Azure DevOps

  • IBM Dependency Based Build (DBB)

  • Zowe CLI

  • VS Code

  • OpenShift

  • Ansible

O código COBOL continua executando no IBM Z, mas o ciclo de desenvolvimento passa a seguir práticas modernas de engenharia de software.


Git para um COBOL Padawan

Se você está iniciando na programação COBOL, encare o Git como uma habilidade tão importante quanto aprender:

  • IF

  • PERFORM

  • EVALUATE

  • READ

  • WRITE

  • EXEC SQL

  • CICS LINK

Hoje um profissional que domina apenas a linguagem perde competitividade.

As empresas procuram desenvolvedores que também entendam de colaboração, automação, revisão de código e integração contínua.


Boas práticas para o dia a dia

Algumas recomendações fazem enorme diferença:

  • Faça commits pequenos e frequentes.

  • Cada commit deve representar uma única alteração lógica.

  • Escreva mensagens claras e objetivas.

  • Nunca desenvolva diretamente na branch main.

  • Revise as mudanças com git diff antes de cada commit.

  • Consulte git status constantemente.

  • Configure um .gitignore adequado ao seu projeto.

  • Prefira git fetch quando quiser analisar alterações antes de integrá-las.

  • Evite git reset --hard sem compreender totalmente suas consequências.

  • Utilize Pull Requests para revisão de código e compartilhamento de conhecimento.


Conclusão

O Git é muito mais do que uma coleção de comandos. Ele representa uma mudança de paradigma na forma como construímos software, promovendo colaboração, rastreabilidade e segurança. Para o programador COBOL Padawan, dominar essa ferramenta significa conectar décadas de experiência em sistemas corporativos às práticas modernas de DevOps, integração contínua e desenvolvimento assistido por Inteligência Artificial.

Assim como aprender JCL vai muito além de decorar //JOB e //EXEC, aprender Git vai muito além de executar git add, git commit e git push. O verdadeiro diferencial está em compreender sua arquitetura interna, seus objetos, seus fluxos de trabalho e a filosofia que sustenta um dos projetos de software mais influentes da história.

No universo Bellacosa Mainframe, o Git não substitui a disciplina que sempre caracterizou o desenvolvimento em IBM Z — ele a amplia. Ele oferece mecanismos para preservar conhecimento, facilitar auditorias, permitir revisões estruturadas e integrar aplicações legadas a pipelines modernas de entrega contínua. Em uma era em que a Inteligência Artificial acelera a escrita de código, o Git continua sendo a memória confiável do projeto, registrando cada decisão técnica e garantindo que a evolução do software seja transparente, reproduzível e segura.

O conselho final para todo COBOL Padawan é simples: não estude apenas os comandos. Estude os conceitos. Entenda como o Git pensa. Quando isso acontecer, você deixará de ser apenas um usuário da ferramenta e passará a utilizá-la como um verdadeiro engenheiro de software, preparado para atuar tanto em aplicações modernas quanto nos ambientes críticos que movimentam bancos, seguradoras, governos e grandes corporações ao redor do mundo. Afinal, tecnologias mudam, linguagens evoluem, mas a capacidade de controlar, compreender e colaborar sobre o código continuará sendo uma das competências mais valiosas da engenharia de software.