Git e Github para iniciantes: trabalhando com repositórios

Esta publicação faz parte de uma série que aborda as ferramentas Git e Github de uma forma aprofundada, porém voltada para iniciantes. Se você está iniciando seus estudos ou possui menos de 1 ano de experiência nessas ferramentas ou em ferramentas similares como Bitbucket, Gitlab, Git no Google Cloud, Git AWS com CodeCommit e outras, esta série será ótima para você. Aproveite!

Para acessar a primeira publicação da série, clique aqui: Git e Github para iniciantes: introdução.

Introdução

Este é a segunda publicação da Série: Git e Github para iniciantes e você vai aprender aqui o que são e como trabalhar com Repositórios Git, quais são os estados de um arquivo e como funciona a Working Directory.

Para se beneficiar por completo desta postagem, você precisa ter o Git instalado em seu computador e uma conta no Github. Utilize os links abaixo se precisar de ajuda com isso.

Como instalar o Git no computador e Criar uma conta no Github. E retorne aqui para continuarmos.

Índice desta publicação

O que são Repositórios?

Repositórios são armazenamentos virtuais para um projeto. Em termos bastante práticos é uma pasta .git criada a partir de um comando e que armazena objetos e metadados sobre o histórico do seu projeto. Eles podem ser remotos ou locais e todo repositório possui todo o histórico de um determinado projeto.

Inicializando e trabalhando em um repositório

Este é um tópico de muita importância. Nesta etapa vamos abordar todo processo que envolve um repositório (que é o local onde as versões do seu código ficam armazenadas). Você poderá obter um repositório a partir de algum lugar com o comando clone ou inicializar um repositório dentro de um projeto existente ou que está iniciando com o comando init.

Abra um programa para executar linhas de comando (como Cmder ou PowerShell), navegue até a pasta que deseja transformar em projeto, ou crie uma, e execute git init para inicializar um projeto git. Este comando cria um diretório chamado .git que contém o necessário para manter o histórico de alterações do seu projeto. Caso já existam arquivos na pasta, eles estarão no estágio untracked, pois não estão sendo rastreados pelo git ainda.

Para iniciar o rastreamento dos arquivos que já existem na pasta do seu projeto, faça o primeiro commit executando os comandos abaixo em seu terminal:

git add .
git commit -m "Primeiro commit"

A partir de agora você tem um repositório com arquivos rastreados e um commit.

Vamos fazer algumas alterações neste repositório local para entender a dinâmica de alterações nos arquivos. Vamos criar alguns arquivos, execute os comandos abaixo:

echo "<h1>Olá mundo</h1>" > index.html
echo "<h1>Sobre este site</h1>" > sobre.html
git status

O resultado será algo assim:

C:\Users\Master\meu-site(main -> origin)
λ git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    	index.html
    	sobre.html

nothing added to commit but untracked files present (use "git add" to track)

Para este nosso caso, precisamos executar o comando git add antes do commit, porque temos arquivos não rastreados pelo git. O comando git add prepara os arquivos para o próximo commit, então os arquivos são enviados para a área de staging.

Você pode adicionar todos os arquivos de uma vez com git add . ou individualmente cada arquivo com git add <nome-arquivo>. Vamos executar o seguinte comando:

git add index.html

Quando executamos git status, percebemos que cada arquivo está em um estágio diferente. O arquivo index.html está em staged pronto para ser enviado no próximo commit. Já o arquivo sobre.html ainda precisa ser adicionado em staged. Veja:

λ git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    	new file:   index.html

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    	sobre.html

Vamos executar um git commit e analisar o estado do nosso repositório com git status logo depois.

λ git commit -m "Um commit"
[main 38fbfb9] Um commit
 1 file changed, 1 insertion(+)
 create mode 100644 index.html
λ git status
On branch main
Your branch is ahead of 'origin/main' by 3 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    	sobre.html

nothing added to commit but untracked files present (use "git add" to track)

Veja que o arquivo sobre.html ainda está no estado untracked e o repositório está limpo sem nenhuma alteração. Isso acontece porque todas as alterações já foram adicionadas em commits.

Quando executamos um commit, nós estamos dizendo para o git salvar as alterações rastreadas em nosso repositório.

Utilizando um repositório remoto GIT

Repositórios remotos, como o próprio nome sugere, não estão no seu computador. São servidores públicos ou privados, plataformas como Github, Bitbucket, GitLab e outras. 

Geralmente são servidores que toda a equipe de desenvolvimento utiliza para clonar ou publicar seus commits atualizados.

Para este exemplo vamos utilizar um repositório criado gratuitamente no Github. Crie seu repositório com ajuda desta publicação, execute os comandos abaixo no seu programa de linha de comando dentro do repositório que você criou no tópico anterior.

O resultado dos comandos será a publicação do seu projeto local lá no Github.

git remote add origin https://github.com/seu-usuario/seu-repositorio.git
git branch -M main
git push -u origin main

Aqui nós adicionamos o novo repositório como o remote do nosso projeto local. Alteramos o nome do branch local para main (é o padrão dos novos projetos no Github) e fizemos um push para o repositório remoto utilizando a flag -u para criar uma espécie de referência entre o repositório local e remoto e sempre que você fizer novos pushes, poderá omitir alguns argumentos.

Clonando um repositório do Github

Agora vamos deixar de lado o que fizemos até aqui e entender a dinâmica da clonagem de projetos que já existem no Github.

Se você deseja contribuir ou simplesmente baixar algum projeto, precisará de uma cópia do repositório e para isso você vai utilizar o git clone <url>. Este comando não baixa apenas uma cópia de trabalho para o seu computador local, ele baixa todo o histórico do projeto e de todos os arquivos. Digamos que se o servidor compartilhado parar de funcionar, você pode utilizar qualquer clone mais atualizado do repositório para recuperar o projeto completo.

Este exemplo serve para qualquer repositório central/remoto que utilize git. Abaixo um exemplo para copiar a url do projeto no Github.

Copiando a URL para clonar um repositório GIT no Github

Execute o comando abaixo em seu programa de linha de comando para baixar o projeto desejado. No exemplo estamos clonando o repositório de um site pessoal de um de nossos tutoriais.

git clone https://github.com/tiagosabadini/githubpages-site-html.git

Após a finalização desta etapa, o git vai ter criado uma pasta com o nome do repositório no local que foi executado o comando. Para dar um nome diferente ao repositório que vai ser clonado, após a url, adicione um nome.

git clone https://github.com/tiagosabadini/githubpages-site-html.git novo-projeto

Observe que utilizamos o protocolo http para o clone, mas o git possui outras formas de obter repositórios como git:// ou user@server:path/to/repo.git

Os três principais estados de um arquivo

Esta é uma das partes mais importantes para este momento do seu aprendizado. Nesta publicação falamos sobre as mudanças nos arquivos, mas não entramos em detalhes. Porém a hora é agora de entender isso.

Os arquivos de um projeto GIT podem aparecer em três estados distintos: modified, staged e commited.

  • Modified significa que você tem arquivos rastreados pelo GIT que foram modificados (que é nosso processo normal de trabalho);
  • Staged significa que você adicionou os arquivos para serem enviados no próximo commit. Isso acontece quando executamos git add <file>;
  • Committed significa que os arquivos estão salvos no banco de dados do GIT. Isso ocorre quando executamos git commit <message>.

Working Directory é um checkout ou uma cópia de uma versão do projeto. Você obtém um cópia quando clona um projeto, ou inicializa um com git init ou quando executa explicitamente o git checkout para um branch específico. 

Tecnicamente falando, esses arquivos foram descompactados do banco de dados do git (normalmente na pasta .git) e colocados no disco para você utilizar e modificar.

A Staging Area contém as informações sobre o que será enviado no seu próximo commit.

Repository é o banco de dados do GIT e fica dentro da pasta .git. É onde ficam armazenados objetos e metadados de tudo que está acontecendo no projeto.

Fluxo de trabalho simples

  • Dentro de um projeto GIT você modifica arquivos;
  • Você adiciona à staging area os arquivos que devem ser enviados para o seu próximo commit;
  • Você faz um commit adicionando permanentemente os arquivos no repositório.

Detalhando a Working Directory

Cada arquivo dentro da Working Directory pode estar como rastreado e não rastreado. Arquivos rastreados são aqueles que estavam no seu último commit e/ou que foram recém adicionados à área de staging e continuaram recebendo modificações antes do commit.

Os arquivos rastreados podem ser: inalterados, modificados ou preparados. Ou seja, tudo que é reconhecido pelo GIT. Arquivos não rastreados são os demais, todos que não estavam no seu commit anterior e não foram adicionados ao staging

A medida que você edita arquivos que estavam presentes no último commit, o GIT entende como arquivos modificados, pois está comparando com uma versão anterior que ele já conhece. Quando você adiciona um novo arquivo ao projeto, ele não estará rastreado até que seja adicionado a área de staging.

Conclusão

Na próxima publicação vamos mergulhar no mundo dos branches, entendendo a fundo o que são e quais são boas práticas para você que quer contribuir em projetos que possuem outras pessoas trabalhando.

Para receber as notificações de novas publicações dessa série e de outras, siga o meu perfil no Instagram.

3 comentários

Os comentários estão fechados.