Articles

Aprender o básico de Git em Menos de 10 minutos

por Gowtham Venkatesan

Sim, o título é uma clickbait. Não há maneira de compreender os conceitos básicos da tecnologia de git em apenas 10 minutos. Mas pode chegar muito perto em cerca de 25 minutos. E é esse o objectivo deste artigo.

Se quiser começar a aprender sobre a tecnologia de Git, veio ao sítio certo. Este é um guia completo para principiantes de Git. Há muitos clientes para Git. A tecnologia é toda a mesma, independentemente do cliente. Mas neste guia vamos usar GitHub para compreender Git.

Vamos começar!

O que é Controlo de Versão?

Controlo de Versão é um sistema que regista alterações num ficheiro ou conjunto de ficheiros ao longo do tempo, para que se possa recordar versões específicas mais tarde. Assim, idealmente, podemos colocar qualquer ficheiro no computador no controlo de versões.

Umm… Está bem… Mas porquê Tho?

Here’s Why:

A Version Control System (VCS) permite reverter ficheiros para um estado anterior, reverter todo o projecto para um estado anterior, rever alterações feitas ao longo do tempo, ver quem modificou pela última vez algo que possa estar a causar um problema, quem introduziu um problema e quando, e muito mais. Utilizar um VCS significa também que se estragar ou perder ficheiros, pode geralmente recuperar facilmente. E por vezes só se quer saber “quem escreveu esta porcaria”, e ter acesso a essa informação vale a pena ?.

So O que é Git?

Git é um sistema de controlo de versões para acompanhar as alterações em ficheiros informáticos e coordenar o trabalho nesses ficheiros entre múltiplas pessoas. Git é um Sistema de Controlo de Versão Distribuído. Portanto, Git não depende necessariamente de um servidor central para armazenar todas as versões dos ficheiros de um projecto. Em vez disso, cada utilizador “clona” uma cópia de um repositório (uma colecção de ficheiros) e tem o histórico completo do projecto no seu próprio disco rígido. Este clone tem todos os metadados do original enquanto o próprio original é armazenado num servidor auto-hospedado ou num serviço de alojamento de terceiros como GitHub.

Git ajuda-o a manter um registo das alterações que faz ao seu código. É basicamente o separador do histórico do seu editor de código (Sem modo incógnito ?). Se em qualquer altura, enquanto codifica, acertar num erro fatal e não souber o que o está a causar, pode sempre voltar ao estado estável. Por isso, é muito útil para a depuração. Ou pode simplesmente ver que alterações fez ao seu código ao longo do tempo.

Um exemplo simples do histórico de versões de um ficheiro.

No exemplo acima, todas as três cartas representam versões diferentes do mesmo ficheiro. Podemos seleccionar qual a versão do ficheiro que queremos utilizar em qualquer altura. Assim, posso saltar para qualquer versão do ficheiro no continuum de tempo git.

Git também ajuda a sincronizar o código entre várias pessoas. Portanto, imagine que você e o seu amigo estão a colaborar num projecto. Ambos estão a trabalhar no mesmo ficheiro de projecto. Agora Git leva essas alterações que você e o seu amigo fizeram independentemente e funde-as num único repositório “Master”. Assim, ao utilizar Git podem assegurar-se de que ambos estão a trabalhar na versão mais recente do repositório. Assim, não têm de se preocupar em enviar os vossos ficheiros um ao outro e trabalhar com um número ridículo de cópias do ficheiro original. E colaborar a longa distância torna-se tão fácil como HTML ?.

Git Workflow:

Antes de começarmos a trabalhar com comandos Git, é necessário que compreendam o que representa.

O que é um Repositório ?

Um repositório a.k.a. repo não é mais do que uma colecção de código fonte.

Há quatro elementos fundamentais no Git Workflow.

Diretório de Trabalho, Área de Estágio, Repositório Local e Repositório Remoto.

Diagrama de um simples Fluxo de Trabalho Git

Se considerar um ficheiro no seu Directório de Trabalho, este pode estar em três estados possíveis.

  1. Pode ser encenado. O que significa que os ficheiros com as alterações actualizadas são marcados para serem submetidos ao repositório local mas ainda não submetidos.
  2. Pode ser modificado. O que significa que os ficheiros com as alterações actualizadas ainda não estão armazenados no repositório local.
  3. Pode ser submetido. O que significa que as alterações feitas ao seu ficheiro são armazenadas em segurança no repositório local.
  • git add é um comando utilizado para adicionar um ficheiro que está no directório de trabalho à área de encenação.
  • git commit é um comando utilizado para adicionar todos os ficheiros que se encontram no repositório local.
  • git push é um comando utilizado para adicionar todos os ficheiros que se encontram no repositório local ao repositório remoto. Assim, no repositório remoto, todos os ficheiros e alterações serão visíveis a qualquer pessoa com acesso ao repositório remoto.
  • git fetch é um comando utilizado para obter ficheiros do repositório remoto para o repositório local mas não para o directório de trabalho.
  • git merge é um comando utilizado para obter os ficheiros do repositório local para o directório de trabalho.
  • git pull é um comando utilizado para obter os ficheiros do repositório remoto directamente para o directório de trabalho. É equivalente a um git fetch e a um git merge .

Agora que sabemos o que é Git e as suas terminologias básicas, vamos ver como podemos colocar um ficheiro sob git. Vamos fazê-lo da forma correcta e da forma difícil. Sem qualquer aplicação GUI.

Parto do princípio que já tem um ficheiro que quer colocar sob controlo de versão. Se não criar uma pasta de amostra chamada ‘MuskCult’ e colocar alguns ficheiros de código de amostra nela.

Passo 0: Criar uma conta GitHub. Duh.

Se ainda não tiver uma, pode fazer uma aqui.

Passo 1: Certifique-se de que tem o Git instalado na sua máquina.

Se estiver num Mac, ligue o terminal e introduza o seguinte comando:

$ git --version

Isto irá solicitar a abertura de um instalador se ainda não tiver o Git. Portanto, configure-o utilizando o instalador. Se já tiver o git, ele apenas lhe mostrará qual a versão do git que tem instalada.

Se estiver a correr Linux(deb), introduza o seguinte no terminal:

$ sudo apt install git-all

Se estiver no Windows:

$ get a mac

Apenas brincadeira… Relaxe… A quantidade de pessoas que despoletei… Phew….
Vá a este link ou a este link para mais informações sobre como obtê-lo.

Passo 2: Diga a Git quem é.

Introduza-se. Deslize para dentro. A sério, mencione o seu nome de utilizador e endereço de e-mail do Git, uma vez que cada Git compromete-se a utilizar esta informação para o identificar como autor.

$ git config --global user.name "YOUR_USERNAME" 
$ git config --global user.email "[email protected]"
$ git config --global --list # To check the info you just provided

Passo 3: Gerar/verificar a sua máquina para chaves SSH existentes. (Opcional)

Por que pergunta? Usando o protocolo SSH, pode ligar e autenticar a servidores e serviços remotos. Com chaves SSH, pode ligar-se ao GitHub sem fornecer o seu nome de utilizador ou palavra-passe em cada visita.

p>Seguir esta ligação para saber mais sobre SSH.
Vá aqui para verificar se tem uma chave SSH existente.
Vá aqui para gerar uma chave SSH.
Vá aqui para adicionar a chave SSH à sua conta GitHub.
E finalmente vá aqui para testar a sua ligação.

Se configurou o SSH, cada comando git que tem uma ligação substitui-o por:

Instead of : https://github.com/username/reponame
You use : [email protected]/username/reponame.git
 Note : You can use both ways alternatively

Estarei a usar o protocolo SSH neste tutorial.

Passo 4: Vamos Git

Criar um novo repositório no GitHub. Siga este link.
Agora, localize na pasta que pretende colocar sob git no seu terminal.

$ cd Desktop/MuskCult

Initialize Git:

E para o colocar debaixo de git, entre:

$ touch README.md # To create a README file for the repository$ git init # Initiates an empty git repository

Agora vá editar o LEIAME.md ficheiro para fornecer informações sobre o repositório.

Adicionar ficheiros à área de encenação para commit:

Agora adicionar os ficheiros ao repositório git para commit:

$ git add . # Adds all the files in the local repository and stages them for commit
OR if you want to add a specific file
$ git add README.md # To add a specific file

Antes de submetermos vamos ver que ficheiros são encenados:

$ git status # Lists all new or modified files to be committed

Comprometa as alterações que fez ao seu Git Repo:

Agora de submeter os ficheiros que adicionou ao seu git repo:

$ git commit -m "First commit"# The message in the " " is given so that the other users can read the message and see what changes you made

Descomprometer Alterações que acabou de fazer ao seu Git Repo:

Agora suponha que acabou de cometer algum erro no seu código ou colocou um ficheiro indesejado dentro do repositório, pode despoletar os ficheiros que acabou de adicionar usando:

$ git reset HEAD~1# Remove the most recent commit# Commit again!

Adicionar uma origem remota e Push:

Agora cada vez que fizer alterações nos seus ficheiros e o guardar, não será automaticamente actualizado no GitHub. Todas as alterações que efectuamos no ficheiro são actualizadas no repositório local. Agora para actualizar as alterações ao master:

$ git remote add origin remote_repository_URL# sets the new remote

O comando remoto git permite-lhe criar, visualizar, e apagar ligações a outros repositórios.

$ git remote -v# List the remote connections you have to other repositories.

O comando remoto git -v lista os URLs das ligações remotas que tem a outros repositórios.

$ git push -u origin master # pushes changes to origin

Agora o comando git push empurra as alterações no seu repositório local até ao repositório remoto que você especificou como origem.

E agora, se formos verificar a nossa página de repositório no GitHub, esta deve ter o seguinte aspecto:

E é isso. Acabou de adicionar os ficheiros ao repositório que acabou de criar no GitHub.

Ver as alterações que fez ao seu ficheiro:

Após começar a fazer alterações nos seus ficheiros e guardá-los, o ficheiro não coincidirá com a última versão que foi submetida ao git. Para ver as alterações que acabou de fazer:

$ git diff # To show the files changes not yet staged

Revert back to the last committed version to the Git Repo:

Agora pode optar por voltar à última versão comprometida, entrando:

$ git checkout .
OR for a specific file
$ git checkout -- <filename>

Ver Histórico de Compromissos:

P>Pode usar o comando git log para ver o histórico de commit you made to your files:

$ git log

Cada vez que fizer alterações que deseje que sejam reflectidas no GitHub, o seguinte é o fluxo de comandos mais comum:

$ git add .$ git status # Lists all new or modified files to be committed$ git commit -m "Second commit"$ git push -u origin master

Agora, se formos ver o nosso reporte, podemos identificar se o commit foi bem sucedido, olhando para a mensagem de commit para cada ficheiro.

Passo 5 : Está tudo muito bem… Mas como descarregar e trabalhar noutros repositórios no GitHub?

Clonar um Repo Git:

Localize para o directório que pretende clonar o repo. Copie o link do repositório que pretende e introduza o seguinte:

$ git clone remote_repository_URL

Feel free to go ahead and clone the repo I created above using: https://github.com/Gothamv/MuskCult

Pushing Changes to the Git Repo:

Agora pode trabalhar nos ficheiros que quiser e comprometer-se com as alterações localmente. Se quiseres empurrar alterações para esse repositório tens de ser adicionado como colaborador para o repositório ou tens de criar algo conhecido como pedido de puxar. Vai e verifica como fazer um aqui e dá-me um pedido pull com o teu ficheiro de código.

Collaborating:

Por isso imagina que tu e o teu amigo estão a colaborar num projecto. Ambos estão a trabalhar no mesmo ficheiro de projecto. Cada vez que fazem algumas alterações e as empurram para o repositório principal, o vosso amigo tem de puxar as alterações que empurram para o repositório principal. O que significa que para se certificar de que está a trabalhar na última versão do git repo de cada vez que começa a trabalhar, um comando git pull é o caminho a seguir.

Agora, abaixo está um exemplo de um projecto em que o meu amigo e eu estamos a colaborar:

Acabou de haver um compromisso sobre o repo

Assim, para ter a certeza de que essas alterações são reflectidas na minha cópia local do repo:

$ git pull origin master

Aqui estão mais dois comandos git úteis:

$ git fetch AND$ git merge

Nos termos mais simples, git fetch seguido por um git merge equivale a um git pull. Mas então porque é que estes existem?

quando usa git pull, Git tenta automaticamente fazer o seu trabalho por si. É sensível ao contexto, por isso Git fundirá qualquer compromisso puxado no ramo em que está a trabalhar actualmente. git pull funde automaticamente os commits sem te deixar revê-los primeiro.

Quando tu git fetch, Git reúne quaisquer commits do ramo alvo que não existam no teu ramo actual e armazena-os no teu repositório local. Contudo, não os funde com a tua actual sucursal. Isto é particularmente útil se precisares de manter o teu repositório actualizado, mas estás a trabalhar em algo que pode quebrar se actualizares os teus ficheiros. Para integrar os commits no teu ramo principal, usas git merge.

Mais Uma Coisa:

.gitignore

Então o que é?

.gitignore diz ao git quais os ficheiros (ou padrões) que deve ignorar. É normalmente utilizado para evitar submeter ficheiros transitórios do seu directório de trabalho que não são úteis a outros colaboradores, tais como produtos de compilação, ficheiros temporários que IDEs criam, etc.

p> Assim, no exemplo acima, ficheiros como __pycache__, .DS_Store são utilizados pelo sistema para armazenar informação para um acesso mais rápido. Isto não é útil para outros colaboradores. Assim, podemos dizer ao git para os ignorar adicionando um .gitignore file.

Utiliza o comando touch para criar o .gitignore file:

$ touch .gitignore

E pode adicionar os seguintes padrões para dizer ao git para ignorar tais ficheiros.

/*.cmake/*.DS_Store/.user/buildetc. depending upon the files you want git to untrack

E isso é praticamente tudo para o básico. Fique atento à Parte 2 que se centrará em Branch, Merge, Stash, Rebase etc.

Se gostou do artigo, não se esqueça de esmagar o botão Clap e certifique-se de me seguir para a Parte 2.

Referências :

Adicionar um projecto existente ao GitHub usando a linha de comando – Documentação do utilizador
Pôr o seu trabalho existente no GitHub pode permitir-lhe partilhar e colaborar de muitas e excelentes maneiras. Se estiver a migrar o seu…help.github.com Como desfazer (quase) qualquer coisa com Git
Uma das características mais úteis de qualquer sistema de controlo de versões é a capacidade de “desfazer” os seus erros. Em Git, “desfazer”…blog.github.comGit na linha de comando – Não tenha medo de cometer 0.3 documentação
Existem outras formas de instalar Git; pode até obter uma aplicação gráfica Git, que incluirá a linha de comando…dont-be-afraid-to-commit.readthedocs.ioStart usando Git na linha de comando | GitLab
Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, e GitLab Runner.docs.gitlab.comQual é a diferença entre ‘git pull’ e ‘git fetch’?
Moderator Nota: Dado que esta pergunta já teve sessenta e sete respostas postadas (algumas delas eliminadas)…stackoverflow.com

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *