Como ficar bom no Git?

Tempo de leitura: 8 minutos

Renomear seus arquivos sem parar é um processo sólido para um aluno da 4ª série aprendendo o Microsoft Word, mas você é um desenvolvedor, caramba! Nós temos a tecnologia para um maior controle de versão, no entanto, para os recém devs, isso pode ser intimidador: então eles frequentemente ignoram, ou atrasam, aceitando-o.

Nesta postagem, realizaremos os seguintes feitos:
1. Inicialize um repositório vazio e construa-o do zero
2. Crie uma chave SSH e adicione-a à nossa conta
3. Faça alterações em nossa base de código e sincronize-as com origem.

Começando pela conta

Eu prefiro o Gitlab porque foi o que eu fui exposto primeiro, e eles foram o primeiro grande nome a oferecer repositórios privados gratuitos e ilimitados, que o Github agora oferece também.

Depois de criarmos uma conta, teremos uma página inicial do usuário com a seguinte aparência: https://gitlab.com/alfredotorquato. Este URL é como nós conectaremos um repositório à nossa conta.

Para criar um novo repositório, basta ir ao diretório que desejamos como root e executar:

>$ git init

Isso produz um diretório chamado .git que contém todas as informações necessárias para a versão e controle de seus arquivos. Vamos criar alguns arquivos para que o Git tenha algo para rastrear:

>$ echo "Olá blog da uebile" > readme.txt

Agora que há um arquivo no diretório, verificar o status do nosso repositório deve gerar resultados.

>$ git status
>On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
readme.txt
nothing added to commit but untracked files present (use "git add" to track)

O retorno do “git status” nos mostra o status de nosso repositório / branch: estamos no branch master, sem commits, e um arquivo não acompanhado. O Git separa as adições de arquivos e as alterações em três categorias:
Arquivos não rastreados: Novos arquivos que o Git não foi informado para rastrear previamente.
Área de trabalho: arquivos que foram modificados, mas não estão comprometidos.
Área de preparação: arquivos modificados que foram marcados para ir no próximo commit.
Para que o Git comece a rastrear as mudanças em nosso arquivo readme.txt, precisamos adicioná-lo.

>$ git add readme.txt
>$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
new file:   readme.txt

Agora readme.txt foi adicionado à nossa “área de trabalho”. Para persistir isso, devemos commitar o arquivo. Commits são acompanhados por uma mensagem, então outros desenvolvedores (ou nós mesmos) lendo o projeto entendem a lógica ou o raciocínio por trás da mudança / adição. Os commits também são pesquisáveis, portanto, escreva mensagens fortes e relevantes.
No entanto, se você tentou commitar agora, o Git irá reclamar que não sabe quem você é!

>$ git commit -m "arquivo readme adicionado"
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
  git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address')

Commits tem autores, o nome e email do desenvolvedor que fez o commit. Para que o Git funcione corretamente, precisamos fornecer esses metadados, além de fornecer os meios para se conectar a uma origem, neste caso, nossa conta do Gitlab.

As mensagens do Git fazem um bom trabalho em apontar você na direção certa, vemos os comandos para rodar diretamente da saída do console acima, e podemos acrescentar - global se quisermos configurar esses valores para a máquina inteira, ao invés de este repositório único (uma boa ideia se for um computador pessoal).

>$ git config user.email "[email protected]"
>$ git config user.name "Alfredo Torquato"

Agora podemos commitar:

>$ git commit -m "arquivo readme adicionado"
[master (root-commit) d7962a8] arquivo readme adicionado
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

Antes de enviarmos este commit, o Git precisa de uma referência para sua origem, o termo para o repositório remoto do qual o projeto foi originalmente clonado. No entanto, se criarmos um projeto a partir do zero, como acabamos de fazer, precisaremos construir nosso repositório inicial como um lar permanente.

Usando PUSH pela primeira vez

Repositórios são ótimos para desenvolvedores que religiosamente iniciam projetos que nunca terminam, mas para aqueles como nós que querem visibilidade de longo prazo em nossos projetos, precisamos de uma maneira de dar push: digite SSH.

O envio do código para a origem via SSH é mais simples que o HTTPS porque você não precisa enviar um nome de usuário e senha. Você pode (e nós vamos) criar um par de chaves SSH, fornecer ao Gitlab sua chave pública e enviar as alterações automaticamente com validação e segurança.

Para criar um par de chaves:

>$ cd
>$ mkdir .ssh;cd .ssh
>$ ssh-keygen -o -t rsa -b 4096 -C "[email protected]"

O parâmetro -C é opcional, ele fornece um comentário no final da sua chave para distingui-lo dos outros se você tiver vários.

Isto irá criar id_rsa (sua chave privada) e id_rsa.pub (sua chave pública). Passamos nossa chave pública e mantemos nossa chave privada.

As Configurações do usuário do Gitlab são onde você adicionaria sua chave pública à sua conta, permitindo que finalmente rolasse o push.

$ git push --set-upstream [email protected]:alfredotorquato/projetotesteblog.git master
Counting objects: 3, done.
Writing objects: 100% (3/3), 264 bytes | 264.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: The private project alfredotorquato/projetotesteblog was successfully created.
remote:
remote: To configure the remote, run:
remote:   git remote add origin [email protected]:alfredotorquato/projetotesteblog.git
remote:
remote: To view the project, visit:
remote:   https://gitlab.com/alfredotorquato/projetotesteblog
remote:
To gitlab.com:alfredotorquato/projetotesteblog.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from '[email protected]:alfredotorquato/projetotesteblog.git'.

Vamos detalhar esse comando:

git push: é o núcleo deste comando, estamos tentando usar o Git para colocar nosso código em um caminho de origem recém-definido
– set-upstream: Diz ao git o caminho para a origem, se já tinha push anteriormente a sua ramificação atual, ele irá lembrar onde a origem está
[email protected]:alfredotorquato/projetotesteblog.git: Este é o caminho SSH para a origem da minha conta. [email protected]: será o mesmo para todos os usuários do Gitlab. alfredotorquato é o nome de usuário da minha conta, projetotesteblog será o nome desse novo repositório e, finalmente, cada caminho do Git terminará em .git
master: este é o nome do ramo que eu quero efetuar o push para quando inicializar

Depois do push, podemos finalmente ver nosso repositório vazio.

Como prometido, atualizo o readme.txt para incluir todos os comandos acima e, em seguida, verifique o diff:

>$ git diff
diff --git a/readme.txt b/readme.txt
index 8f8d054..915422b 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,13 @@
 Olá blog da uebile
+git init
+echo "Olá blog da uebile" > readme.txt
+git add readme.txt
+git commit -m "arquivo readme adicionado"
+git config user.email "[email protected]com"
+git config user.name "Alfredo Torquato"
+git commit -m "arquivo readme adicionado"
+cd
+mkdir .ssh;cd .ssh
+ssh-keygen -o -t rsa -b 4096 -C "[email protected]"
+cd /Users/alfredotorquato/workspace/projetotesteblog/
+git push --set-upstream [email protected]:alfredotorquato/projetotesteblog.git master

Add/ Commit a alteração (“git add.” Adicionará todos os arquivos no diretório de trabalho atual e abaixo dele)

>$ git add .
>$ git commit -m "Adicionado todos os comandos git no arquivo"
[master b8a8b82] Adicionado todos os comandos git no arquivo
 1 file changed
>$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 260 bytes | 130.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitlab.com:alfredotorquato/projetotesteblog.git
   d7962a8..b8a8b82  master -> master

Note que desta vez nós apenas rodamos o git push sem parâmetros adicionais, isso porque o Git sabe onde a origem já está, então não precisamos fornecê-lo toda vez. Se voltarmos para a página inicial do nosso projeto nós vemos o readme atualizado! É simples assim, não importa o conteúdo do arquivo, podemos colocar subdiretórios, imagens, javascript, CSS, arquivos de configuração, etc em um repositório e o Git irá rastreá-los do mesmo jeito.

Agora que o git esta dominado, você está muito mais preparado para continuar desenvolvendo.

Gostou do conteúdo? não deixe de seguir a uebile nas redes sociais, pois toda semana tem post novo aqui no blog com mais dicas para o seu impulso digital.