Não é de hoje que uma das habilidades mais requisitadas nas entrevistas técnicas de emprego para a área de TI é o conhecimento em Git. Mas, por que será que o Git é tão importante assim?
Ao decorrer desse POST vamos aprender o que é o Git, como o Git pode nos ajudar no nosso dia-a-dia como desenvolvedor e qual o conhecimento mínimo em Git que você precisa ter para não passar apertos.
O que é Git?
Git é um sistema de controle de versão moderno e de código aberto criado em 2005 por Linus Torvalds (o pai do LINUX). Por meio do Git podemos controlar todas as alterações que fazemos em nosso projeto, além de poder ramificar nosso código isolando alterações e tornando cada um desses ramos independentes entre si.
Diferente de outros controles de versão, o Git tem uma arquitetura distribuída, ou seja, ao invés de ter apenas um único local para manter o histórico completo do versionamento do seu software, temos uma cópia do repositório bem como suas alterações, no dispositivo de todos os desenvolvedores do projeto .
Como instalar o Git?
Por se tratar de um software a instalação do Git pode (e muito provavelmente vai) variar de um sistema operacional para outro. Para ver o passo a passo, bem como obter o instalador para o seu sistema operacional, acesse o site oficial do Git.
O Git é um software que roda via linha de comando (CLI), mas existem algumas ferramentas gráficas que podem fornecer uma abordagem mais simples para você. No entanto não vamos aborda-las aqui, visto que o conhecimento da linha de comando se faz necessário nesse primeiro momento.
Iniciando um repositório (git init)
Para iniciar um repositório temos o comando git init
. Esse comando avisa ao Git que ele deve pegar a pasta atual onde o comando foi executado e iniciar um projeto ali.
Para esse exemplo vamos criar uma pasta em nosso computador em: C:\acampamento-dev\aprendendo-git
ou /home/acampamento-dev/aprendendo-git
(no caso do LINUX). Dentro dessa pasta vamos criar um arquivo chamado index.php
.
Agora vamos acessar esse diretório utilizando nosso cmd ou terminal (no caso do LINUX) e digitar o comando para iniciar um repositório.
git init
Se tudo correu bem, você receberá a seguinte resposta:
Initialized empty Git repository in C:/acampamento-dev/aprendendo-git/.git/
Perceba que foi criado um diretório oculto chamado .git
, é lá dentro que os arquivos do Git serão armazenados, então, não exclua essa pasta 😉.
Pronto, você já executou o seu primeiro comando Git e já tem um repositório iniciado em seu computador.
Obtendo o status do repositório (git status)
A qualquer momento podemos obter informações de como está o nosso repositório com o comando git status
se o executarmos agora já poderemos ter algumas informação.
git status
O resultado do comando acima será similar a:
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.php
nothing added to commit but untracked files present (use "git add" to track)
Aqui já podemos identificar algumas coisas interessantes:
- On branch master: Lembra que eu comentei um pouco mais acima que o Git permite ramificar o nosso repositório? O ramo master é o ramo principal criado automaticamente pelo Git. Em alguns casos esse ramo pode ter o nome main, mas o funcionamento é o mesmo.
- No commits yet: Aqui o Git está lhe avisando que ainda não tem nenhum commit neste repositório. Um commit é como se fosse um save point de um jogo, ele salva tudo que aconteceu daquele ponto para trás.
- Untracked files: Nesse ponto o Git mostra a lista dos arquivos que estão ou não sendo rastreados por ele para que ele saiba quando houver modificação nesses arquivos. Perceba que ele disse que o arquivo index.php ainda não está sendo rastreado e já lhe dá ali uma dica de comando para adicionar esse arquivo à lista de arquivos rastreados.
- Por fim ele avisa que nada foi adicionado ao commit mas existem arquivos não rastreados presentes.
Adicionando arquivos aos nossos commits (git add)
Sempre que criamos ou alteramos um arquivo e queremos "commita-lo", ou seja, adicioná-lo a aquele save point que comentei agora a pouco, precisamos manualmente incluí-los à lista de arquivos rastreados, para isso basta executar o comando git add
, seguido do nome (ou caminho, se ele estiver em outro diretório filho) do arquivo que você quer adicionar.
git add index.php
Uma forma alternativa é incluindo todos os arquivos não rastreados ao mesmo tempo
git add .
Se rodarmos o comando git status
novamente, teremos uma resposta um pouco diferente agora.
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.php
Agora temos uma resposta a mais
- Changes to be committed: Aqui ele está dizendo que você tem "mudanças" a serem commitadas, ou seja, ele está confirmando que você conseguiu adicionar com sucesso o arquivo à lista de arquivos rastreados, porém eles ainda não fazem parte do "save point", até porque não existe um ainda, então, que tal cria-lo agora?
Criando um commit (git commit)
Agora que já temos arquivos preparados para serem commitados, podemos de fato commita-los com o comando git commit
. Esse comando deve ser utilizado com um parâmetro adicional -m indicando uma string que é mensagem que identifica o commit.
git commit -m "Commit inicial"
Uma resposta similar a essa será exibida
[master (root-commit) fb6ace1] Commit inicial
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 index.php
Basicamente ele indica que 1 arquivo foi modificado, mas nenhuma linha dele foi inserida nem removida.
Se executamos novamente o git status
teremos a seguinte resposta.
On branch master
nothing to commit, working tree clean
Ou seja... Nada para commitar, sua árvore de trabalho está limpa 🙂.
Obtendo logs do nosso repositório (git log)
Além do comando git status
, um outro comando muito interessante é o git log
, ele mostra uma lista com todo o histórico de commits do nosso repositório.
git log
Se você executar esse comando acima, receberá a seguinte reposta:
commit fb6ace173e96e23a34417ec47d58ed2f988b10a1 (HEAD -> master)
Author: Paulo Reis <acampamentodev@gmail.com>
Date: Sun Aug 7 13:13:53 2022 -0300
Commit inicial
Modificando nossos arquivos
Vamos agora fazer algumas modificações em nosso projeto para ver como o Git funciona.
Modifique o seu arquivo index.php.
<?php
function obterIniciais(string $nomeCompleto) {
$partes = explode(" ", $nomeCompleto);
$iniciais = array_map(function($nome) {
return $nome[0];
}, $partes);
return implode("", $iniciais);
}
echo obterIniciais("Paulo Reis");
Vamos analisar o status do nosso projeto agora
git status
O resultado agora será:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.php
no changes added to commit (use "git add" and/or "git commit -a")
O que é Stage?
Stage é uma área do Git que armazena temporariamente arquivos que já fazem parte do nosso repositório e que já estão prontos para serem commitados. Sempre que fazemos uma alteração em um arquivo que está sendo rastreado, precisamos manualmente dizer que queremos adiciona-los ao próximo commit.
Para sentir a diferença vamos fazer mais uma modificação no nosso projeto
Vamos criar um novo arquivo chamado funcoes.php e vamos mover nossa função lá para dentro.
<?php
function obterIniciais(string $nomeCompleto) {
$partes = explode(" ", $nomeCompleto);
$iniciais = array_map(function($nome) {
return $nome[0];
}, $partes);
return implode("", $iniciais);
}
E o nosso arquivo index.php deverá ficar assim agora:
<?php
include "funcoes.php";
echo obterIniciais("Paulo Reis");
Se executarmos o git status
agora teremos:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
funcoes.php
no changes added to commit (use "git add" and/or "git commit -a")
Perceba que agora temos 2 listas:
- Arquivos fora do stage
- Arquivos não rastreados
Vamos agora adicionar o arquivo funcoes.php ao stage com o comando git add
e depois ver o status do repositório.
git add funcoes.php
git status
Vamos analisar a resposta:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: funcoes.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.php
Agora temos 2 listas. Uma com arquivos não rastreados e outra com arquivos no stage. Se executarmos o comando git commit
apenas o arquivo que está no stage será salvou em nosso "save point". Mas não vamos fazer isso, vamos colocar também o index.php no stage antes de commitarmos.
git add index.php
Se rodarmos o git status
agora, teremos:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: funcoes.php
modified: index.php
Ou seja, agora temos 2 arquivos no Stage, sendo um "novo arquivo" que é o funcoes.php, e um "arquivo modificado" que é o index.php.
Agora sim podemos commitar
git commit -m "Adiciona um arquivo para as funções"
Se executarmos o git status
agora teremos:
On branch master
nothing to commit, working tree clean
Isso indica que não tem mais nada para ser commitado. Porém se executarmos o:
git log
Termos:
commit 5b90cf90d5bd13761d45727131d4542d2851831c (HEAD -> master)
Author: Paulo Reis <acampamentodev@gmail.com>
Date: Sun Aug 7 14:40:06 2022 -0300
Adiciona um arquivo para as funções
commit fb6ace173e96e23a34417ec47d58ed2f988b10a1
Author: Paulo Reis <acampamentodev@gmail.com>
Date: Sun Aug 7 13:13:53 2022 -0300
Commit inicial
Porém na vida real não trabalhamos o tempo todo na branch master, podemos criar vários ramos para organizar a evolução do nosso projeto, mas isso é assunto para o próximo post. Te vejo lá! 🙂.