
O que é Git?
Git é um sistema de controle de versão distribuído e de código aberto. Ele permite que desenvolvedores e cientistas de dados acompanhem o código, façam merges de mudanças e revertam para versões anteriores - AWS. Você pode sincronizar alterações com um servidor remoto. Pela flexibilidade e popularidade, o Git se tornou um padrão do mercado, já que funciona praticamente em todos os ambientes de desenvolvimento, ferramentas de linha de comando e sistemas operacionais.
Como o Git funciona?
O Git armazena seus arquivos e o histórico de desenvolvimento em um repositório local. Sempre que você salva alterações feitas, o Git cria um commit. Um commit é um snapshot dos arquivos naquele momento. Esses commits são encadeados, formando um grafo de histórico de desenvolvimento, como mostrado abaixo. Ele permite voltar a um commit anterior, comparar mudanças e ver a evolução do projeto - Azure DevOps. Os commits são identificados por um hash único, usado para comparar e reverter alterações.

Um grafo do histórico de desenvolvimento
Branches
As branches são cópias do código-fonte que evoluem em paralelo à versão principal. Para salvar as mudanças realizadas, faça o merge da branch com a versão principal. Esse recurso favorece um trabalho em equipe sem conflitos. Cada desenvolvedor tem sua tarefa e, usando branches, pode trabalhar em uma nova funcionalidade sem interferência dos colegas. Quando a tarefa terminar, você pode mesclar a nova funcionalidade com a versão principal (branch master). Se quiser aprender a clonar uma branch, confira este tutorial sobre Git Clone Branch.

Adicionando uma nova feature ao repositório
Commits
Há três estados de arquivos no Git: modified, staged e commit. Quando você altera um arquivo, as mudanças ficam salvas no diretório local e ainda não fazem parte do histórico do Git. Para criar um commit, primeiro você precisa levar os arquivos alterados para a área de staging. Você pode adicionar ou remover mudanças da staging area e então empacotar essas alterações em um commit com uma mensagem descritiva.

Três estados de arquivos no Git
Quais são os benefícios do Git?
- Acompanhar mudanças: permite visualizar alterações históricas. O histórico facilita identificar e corrigir bugs.
- Integração com IDEs: graças à sua popularidade, o Git está integrado a todos os ambientes de desenvolvimento, como VSCode e JupyterLab.
- Colaboração em equipe: o time pode acompanhar o progresso e, usando branches, cada pessoa trabalha em sua tarefa e depois mescla as mudanças com a versão principal. Pull requests, resolução de conflitos de merge e code reviews fortalecem a colaboração.
- VCS distribuído: em um sistema distribuído, não há armazenamento centralizado de arquivos. Existem múltiplos backups do mesmo projeto. Essa abordagem permite trabalhar offline e fazer commits.
Git em projetos de ciência de dados
O Git oferece controle de versão para scripts, métricas, dados e modelos. Usando a extensão git-lfs, você pode armazenar e versionar grandes bases de dados e modelos de machine learning. Em um projeto típico de ciência de dados, você tem um notebook Jupyter, dataset, modelo, metadados e métricas do modelo. Os metadados incluem arquivos com informações sobre o modelo de machine learning, features, hiperparâmetros e arquivos de automação. Tudo isso é essencial para monitorar a evolução de aplicações de IA e solucionar problemas.
Rastrear experimentos em ciência de dados ajuda pesquisadores a reverter alterações acidentais, escolher o melhor experimento com base nas métricas e colaborar com o time. O diagrama abaixo mostra como mudanças em dados ou código afetam os metadados e a saída do modelo. Acompanhar essas mudanças também ajuda o restante da equipe a propor soluções melhores. Saiba tudo sobre Git no post mais recente da Summer Worsley.

Git em um projeto de ciência de dados
Colaboração com o GitHub
GitHub é uma plataforma em nuvem para desenvolvimento de software. Ela é amplamente usada para salvar arquivos, acompanhar mudanças e colaborar em projetos. Nos últimos anos, o GitHub se tornou a plataforma social mais popular para comunidades de desenvolvimento. Pessoas contribuem com projetos open source e relatórios de bugs, discutem novas ideias e descobrem ferramentas.
Cientistas de dados e engenheiros de machine learning seguem o caminho dos desenvolvedores de software e integram seu fluxo de trabalho ao GitHub. Assim, podem compartilhar pesquisas, permitir contribuições da comunidade e colaborar com times de dados. Você encontra todo tipo de projeto, guia, tutorial e recurso de ciência de dados e ML na plataforma. Para estudantes, virou uma oportunidade de adquirir experiência prática e, com o tempo, conseguir uma vaga em empresas de destaque.
Portfólio
A maioria dos recrutadores técnicos vai pedir seus projetos de portfólio ou o perfil do GitHub. Isso ajuda a avaliar se você é a pessoa certa para a vaga. É altamente recomendado criar um perfil no GitHub e mantê-lo atualizado. Gestores de contratação buscam candidatos com experiência sólida em desenvolvimento e participação em projetos open source. Analisar o portfólio no GitHub também ajuda a preparar perguntas para entrevistas técnicas.

GitHub Profile
O GitHub permite que cientistas de dados mostrem seus projetos, e isso pode contar como experiência profissional no seu currículo. Expor seus projetos de portfólio também abre portas para colaborações, criação de startups e pesquisas.

Projetos de portfólio
Recursos
O GitHub também oferece vários outros recursos tão importantes quanto mostrar um portfólio. Vale conhecer cada um para incorporá-los aos seus projetos de ciência de dados.
- Open source: o GitHub fornece um ecossistema completo para projetos abertos. Você pode patrocinar mantenedores, contribuir com um projeto, usar ferramentas open source no seu código e divulgar seu trabalho.
- Colaboração em comunidade: o GitHub se tornou um espaço de comunidade onde se discutem issues, pedidos de features, contribuições de código e documentação.
- Explore: a aba GitHub Explore ajuda você a descobrir projetos, ferramentas em alta e eventos de desenvolvedores.
- GitHub Gists: compartilhe trechos de código ou incorpore-os em blogs e sites.
- GitHub CLI: permite realizar pull/merge requests, revisar código, checar issues e acompanhar o progresso direto pela linha de comando.
- Armazenamento gratuito: repositórios privados e públicos ilimitados.
- Hospedagem web: você pode publicar seu site de portfólio ou documentação. O GitHub Pages facilita criar e colocar um site no ar.
- Codespaces: um ambiente de desenvolvimento em nuvem integrado ao seu repositório no GitHub.
- Projects: uma ferramenta personalizável e flexível para planejar e acompanhar o trabalho no GitHub.
- Automação: o GitHub Actions automatiza o fluxo de desenvolvimento, como build, testes, publicação, release e deploy.
- Sponsor: apoie seu projeto ou desenvolvedor favorito com uma contribuição mensal ou única. Também é possível usar plataformas de pagamento de terceiros, como ko-fi.
Comandos básicos
Antes de partir para o gerenciamento de projetos de ciência de dados, vamos ver os comandos do Git que você mais vai usar no dia a dia. Eles incluem inicializar o repositório, salvar mudanças, checar logs, enviar alterações para o servidor remoto e fazer merges.
-
git initcria um repositório Git no diretório local. -
git clone <endereço-do-repo-remoto>: copia todo o repositório de um servidor remoto para o diretório local. Também pode copiar repositórios locais. -
git add <arquivo.txt>: adiciona um arquivo, múltiplos arquivos ou pastas à área de staging. -
git commit –m “Mensagem”: cria um snapshot das mudanças e o salva no repositório. -
git configusado para definir configurações do usuário, como email, nome de usuário e formatação de arquivos. -
git statusmostra a lista de arquivos alterados ou que ainda não foram levados para staging e commit. -
git push <nome-do-remoto> <nome-da-branch>: envia commits locais para a branch remota do repositório. -
git checkout -b <nome-da-branch>: cria uma nova branch e muda para ela. -
git remote –v: lista todos os repositórios remotos. -
git remote add <nome-do-remoto> <host-ou-URL-remota>: adiciona um servidor remoto ao repositório local. -
git branch –d <nome-da-branch>: exclui a branch. -
git pull mergecommits de um repositório remoto no diretório local. -
git merge <nome-da-branch>: depois de resolver conflitos, mescla a branch selecionada com a branch atual. -
git logmostra a lista detalhada de commits da branch atual.

Desenvolvimento completo com GitHub
Se quiser aprender mais comandos, confira nosso cheat sheet de Git.
Primeiros passos
Nesta seção, vamos usar o Git para versionar um projeto de ciência de dados e o GitHub como servidor remoto. Vamos aprender a instalar o Git, criar e clonar um repositório do GitHub, executar experimentos de machine learning e enviar mudanças (notebook, modelo, dados) para o GitHub usando o Windows PowerShell 7.
Instalando o Git
O Git funciona em todos os sistemas operacionais. Você pode instalá-lo pela linha de comando ou baixando e executando o instalador.
Linux
Em sistemas Debian/Ubuntu use `apt-get install git`; se estiver em outra distribuição Linux, veja a lista completa de comandos de instalação aqui.
macOS
Se você tiver o homebrew instalado, use este comando para baixar e instalar o Git: `brew install git`. Você também pode baixar o instalador binário e executar o setup.
Windows
Instalar o Git no Windows é simples. Vá até a página de download, clique na sua versão do Windows e baixe e instale. Se você usa a ferramenta winget, pode instalar digitando winget install --id Git.Git -e --source winget no PowerShell.
Depois de instalar o Git, configure seu nome de usuário e email. Essas informações assinam seus commits.
git config --global user.name "your-user-name"
git config --global user.email "your@email.com"
Para mais detalhes sobre como instalar o Git, clique aqui.
Inicializando o projeto
Se você tem uma conta no GitHub, clique no botão + e selecione novo repositório. Depois, digite o nome e adicione uma descrição simples. Isso criará um repositório público vazio.

Criando o projeto
Há várias maneiras de clonar repositórios remotos para o diretório local, e o GitHub fornece um guia detalhado sobre como clonar, adicionar o remoto e inicializar um projeto Git.

Clone no GitHub
Podemos simplesmente clonar o repositório fornecendo o link HTTPS. Certifique-se de estar no diretório de trabalho, usando o Prompt de Comando ou o PowerShell.
git clone https://github.com/kingabzpro/DataCamp-Git.git
>>> Clonando em 'DataCamp-Git'...
>>> warning: Parece que você clonou um repositório vazio.
cd .\DataCamp-Git\
OU
Crie um novo diretório chamado “DataCamp-Git” e inicialize o Git com um comando simples. Depois, adicione a conexão com o repositório remoto para poder sincronizar seu trabalho com o GitHub.
mkdir DataCamp-Git
cd .\DataCamp-Git
git init
>>> Repositório Git vazio inicializado em C:/Repository/GitHub/DataCamp-Git/.git/
git remote add origin https://github.com/kingabzpro/DataCamp-Git.git
OU
Se você já tem um projeto em um diretório, apenas inicialize o Git com `git init` e adicione o remoto do GitHub, como mostrado acima.
Commit simples
Antes de adicionar arquivos ao repositório, confirme que você está no diretório local correto.
Vamos começar criando um README com o título DataCamp-Git. Em seguida, vamos adicioná-lo à área de staging com `git add`.
echo "# DataCamp-Git" >> README.md
git add README.md
O git status mostra que estamos na branch main e que o arquivo `README.md` está em staging e pronto para commit.
git status
>>> On branch main
>>> No commits yet
>>> Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
Para criar nosso primeiro commit, vamos usar `git commit` com uma mensagem. Como dá para ver, o primeiro commit foi adicionado sob o hash ed9c886.
git commit -m "first commit"
>>> [main (root-commit) ed9c886] first commit
>>> 1 file changed, 1 insertion(+)
>>> create mode 100644 README.md
Adicionando arquivos do projeto
Vamos usar o workspace da DataCamp MasterCard Stock Price with LSTM and GRU e baixar os arquivos. O autor já pré-processou os dados e treinou séries temporais com modelos LSTM e GRU. Saiba mais lendo o tutorial de redes neurais recorrentes (RNN).
Para salvar o arquivo do modelo, adicionamos uma nova célula de código no notebook Jupyter do projeto. O script cria um diretório “model” e salva os modelos LSTM e GRU.
!mkdir -p model
model_lstm.save('model/LSTM')
model_gru.save('model/GRU')
Como vemos, o repositório Git tem uma pasta data com arquivos CSV e a pasta model com os pesos e metadados dos modelos.

Agora vamos colocar todos os arquivos em staging. Você pode adicionar qualquer diretório, arquivo ou dado depois do comando inicial.
git add .\data .\model LSTM_GRU.ipynb RNN.png
OU
Se quiser adicionar tudo à área de staging, use o ponto.
git add .
Commit e push
Vamos fazer commit de todas as mudanças com uma mensagem simples; a saída mostra todos os novos arquivos em create mode.
git commit -m "project files added"
>>> [main aa3e19a] project files added
>>> 10 files changed, 5020 insertions(+)
>>> create mode 100644 LSTM_GRU.ipynb
>>> create mode 100644 RNN.png
>>> create mode 100644 data/Mastercard_stock_history.csv
>>> create mode 100644 data/Mastercard_stock_info.csv
>>> create mode 100644 model/GRU/saved_model.pb
>>> create mode 100644 model/GRU/variables/variables.data-00000-of-00001
>>> create mode 100644 model/GRU/variables/variables.index
>>> create mode 100644 model/LSTM/saved_model.pb
>>> create mode 100644 model/LSTM/variables/variables.data-00000-of-00001
create mode 100644 model/LSTM/variables/variables.index
Para sincronizar com o repositório remoto no GitHub é preciso informar o nome do remoto e o nome da branch `git push <nome-do-remoto> <nome-da-branch>`. Se você só tem um remoto e uma branch, apenas `git push` funciona.
Após o `git push`, uma janela pop-up vai pedir suas credenciais: informe seu usuário e senha do GitHub. Você também pode gerar tokens de acesso pessoal e usá-los no lugar da senha. Saiba mais no tutorial de Git Push e Pull.
git push
>>> Enumerating objects: 21, done.
>>> Counting objects: 100% (21/21), done.
>>> Delta compression using up to 4 threads
>>> Compressing objects: 100% (19/19), done.
>>> Writing objects: 100% (21/21), 1.83 MiB | 1.59 MiB/s, done.
>>> Total 21 (delta 2), reused 0 (delta 0), pack-reused 0
>>> remote: Resolving deltas: 100% (2/2), done.
>>> To https://github.com/kingabzpro/DataCamp-Git.git
>>> * [new branch] main -> main
Vamos conferir nosso repositório no GitHub kingabzpro/DataCamp-Git para ver se as mudanças foram enviadas com sucesso. O repositório contém todos os arquivos, dados e modelos.

Push para o GitHub
Branches no Git
É recomendável trabalhar com branches: por exemplo, se você vai tratar da documentação, crie uma branch de documentação usando git checkout ou git branch. Faça as mudanças no README e, quando finalizar, faça o merge da branch com a base.
No nosso caso, criamos e mudamos para uma nova branch chamada readme.
git checkout -b readme
Vamos editar o README adicionando a descrição do projeto e links para o workspace e o tutorial de RNN na DataCamp. Depois, vamos colocar as mudanças em staging e salvar o snapshot com uma mensagem.
git add README.md
git commit -m "project description and links to blog"
>>> [readme f3b8b9b] project description and links to blog
>>> 1 file changed, 8 insertions(+)
O repositório remoto não tem a branch readme. Para criar a branch e enviar as mudanças, usaremos “readme:readme”. A saída mostra que as branches foram criadas e que as branches `readme` local e remota estão sincronizadas.
git push origin readme:readme
>>> remote: Resolving deltas: 100% (1/1), completed with 1 local object.
>>> remote: Create a pull request for 'readme' on GitHub by visiting:
>>> remote: https://github.com/kingabzpro/DataCamp-Git/pull/new/readme
>>> remote:
To https://github.com/kingabzpro/DataCamp-Git.git
>>> * [new branch] readme -> readme
Você pode ver que enviamos com sucesso a branch local para o GitHub com a versão modificada do arquivo README.md.

Branch readme no GitHub
Pull request
Esse fluxo é comum em organizações. Por exemplo, uma pessoa desenvolvedora trabalhou em uma nova feature e quer mesclar as mudanças na branch principal remota. Vamos criar um pull request usando a interface do GitHub clicando em Pull request. Depois, selecione a branch readme que queremos mesclar com a base (main). Escreva uma explicação detalhando as mudanças e clique no botão para abrir o pull request.

Pull request da branch readme para a main
O mantenedor do repositório vai comparar suas mudanças e mesclá-las quando passarem por todos os testes. No nosso caso, você é o mantenedor, então clique em merge para integrar as mudanças à branch principal.

Merge do pull request no GitHub
Parabéns! Criamos o pull request e fizemos o merge com a branch principal. Você pode ver as mudanças na branch main aqui.
Se quiser ver todas as mudanças no seu repositório, digite `git log` e ele mostrará o histórico do projeto. Registrar mudanças em projetos de ciência de dados é importante, e o Git ajuda a rastrear tudo, inclusive grandes datasets.

Histórico de logs do Git
Considerações finais
Práticas de GitOps são fundamentais no desenvolvimento de aplicações de dados. Tornaram-se uma habilidade essencial para todos os tipos de vagas em TI, e até pesquisadores acadêmicos as utilizam para compartilhar código experimental com um público mais amplo. Já o GitHub tem um papel enorme na promoção de projetos open source ao oferecer um ecossistema de desenvolvimento gratuito para todos.
Neste tutorial, aprendemos sobre Git e GitHub e por que eles são importantes para projetos de ciência de dados. Você também viu comandos básicos do Git e teve uma experiência prática de como versionar mudanças em dados, modelos e código. Se quiser se aprofundar em Git, faça o curso Introduction to Git na DataCamp. Você também pode conhecer a importância da certificação GitHub Foundations e como ela pode impulsionar sua carreira.
Torne-se um engenheiro de dados
Perguntas frequentes sobre Git
O que é Git?
Um sistema de controle de versão distribuído e de código aberto. Ele permite que desenvolvedores armazenem, versionem e visualizem mudanças em um projeto de desenvolvimento. Favorece um trabalho em equipe flexível e um fluxo de trabalho otimizado.
O que significa Git?
Não é um acrônimo. Segundo seu criador, Linus Torvalds, “Git pode significar qualquer coisa, depende do seu humor.” É a combinação de três letras aleatórias que não são usadas por nenhum comando UNIX.
Como clonar um repositório Git?
Basta digitar `git clone <endereço do repositório remoto>` no terminal. Você pode clonar repositórios locais e remotos. Há suporte para os protocolos SSH e HTTPS.
Como apagar uma branch no Git?
Para apagar uma branch local, use `git branch -d <nome_da_branch_local>`, e para apagar a branch remota, use `git push <nome_do_remoto> -d <nome_da_branch_remota>`.
Como alternar entre branches no Git?
Altere para uma branch existente com `git checkout <nome_da_branch>` ou crie e mude para uma nova branch com `git checkout -b <nome_da_branch>`.
Como instalo o Git?
Em sistemas Linux, use `apt-get install git`, e para outros sistemas operacionais acesse git-scm.com.
O Git é gratuito?
Sim, é gratuito e de código aberto sob a licença GPL-2.0.
O que é Git Bash?
É um aplicativo para Microsoft Windows que oferece utilitários e experiência de shell baseados em Unix.
Como criar uma nova branch no Git?
Use o comando `git branch <nova-branch> <base-branch>` no terminal. Para criar e alternar para uma nova branch, use `git checkout -b <nome_da_branch>`.
O que o git pull faz?
Atualiza a versão local de um repositório a partir de um servidor remoto, copiando todas as alterações do repositório remoto e mesclando-as com o diretório local. Esse processo geralmente exige resolver conflitos de merge.
Como fazer fork de um repositório no Git?
Fazer fork no GitHub é criar uma cópia de um repositório na sua conta do GitHub a partir de outra conta. É comum para contribuições da comunidade ou trabalho em equipe.
Como renomear uma branch no Git?
Para o repositório local é simples: use `git branch -m <nome-antigo> <nome-novo>`. Para renomear uma branch remota, primeiro remova a antiga com `git push origin --delete <nome-antigo>` e depois envie a nova `git push -u origin <nome_novo>`.
Como excluir o repositório Git?
Você pode excluir a pasta local ou remover a pasta .git com `rm -fr .git`. No GitHub, vá nas configurações do repositório e, no fim da página, você verá a opção de exclusão.
Como instalar o Git no Windows?
Baixe o instalador para Windows no site e execute-o. Ele instalará o Git Bash, o Git CDM e o Git GUI.
Como reverter um commit no Git?
Use `git revert <commit sha>`, que requer o hash único de um commit anterior. Você também pode usar `git revert HEAD~2`, que volta dois commits a partir do HEAD.

