Salva Vidas básico do Git (me ajude a entender git por favor!)

Hello!

Hoje vou deixar alguns comandos básicos do git para iniciantes e para caras como eu (iniciantes também).

Para quem não sabe, o Git é um versionador que controla a versão das coisas que você faz. E quando eu digo coisas, digo que não é somente códigos fonte de linguagens que estão sendo colocados, pois colocamos quaisquer tipos de arquivos aí dentro.

fonte: https://mastigado.wordpress.com

Este tutorial básico estava meio encostado e com o nome de “Comandos básicos do Git”, porém resolvi mudar por conta da necessidade que tive de trabalhar não apenas com os comandos básicos, mas também os passo a passo básicos e quando utilizá-los. Por isso listei-os abaixo da melhor forma que encontrei.

Vale deixar aqui registrado que este tutorial deverá aumentar de tamanho por conta de atualizações constantes que farei e quando achar que tá de bom tamanho retirei esta frase daqui.  Por enquanto é isso, pode esperar que tem mais.

Índice:

Preferencialmente para você que não sabe nada de git comece por aqui

Esclarecimentos básicos antes de você começar mesmo sem saber nada

Estrutura básica de um repositório git

Tente imaginar essa estrutura como camadas, andares de um prédio ou basicamente uma fase, estado ou um estágio que está acontecendo no momento.

– Quando você acabou de efetuar o comando git init, você acabou de criar um repositório e seus arquivos estão ali esperando serem versionados, eles são chamados nesse estado de untracked files. Você está no conhecido working directory (diretório de trabalho).

– Quando você executa o comando git add . (tem esse “.” aí mesmo) está querendo dizer que está retirando os seus arquivos de um working directory e passando para uma staged area.

– E para este último dizemos que quando você executa o comando commit -m “Meu Primeiro Commit” está retirando os seus arquivos de sua staged area e os colocando numa espécie de fichamento ou se assim posso dizer “uma marcação” daqueles arquivos que você separou com o comando git add . e que depois os colocou dentro de uma caixa de papelão com uma etiqueta chamada de “Meu Primeiro Commit”, lacrou e guardou lá no seu depósito. Ou melhor ainda, você acabou de criar uma versão destes arquivos que você marcou com o comando add e que depois executou o commit.

Contudo por conta deste último ítem veja bem, apesar de a grosso modo estarem “guardados”, estes arquivos continuam sempre no mesmo lugar desde o princípio onde sempre estiveram, eles apenas mudam de estado. Para transferir para a nossa realidade é como se você numa hora estivesse com febre, depois estivesse com a temperatura corporal normalizada, depois cansado após uma longa caminhada, depois dormindo e por aí vai, você sempre estará no planeta terra (seu planeta seria seu repositório git), mas o seu estado vez ou outra alternará.

Agora sim iniciaremos.

A – Comandos básicos de configuração do gitVoltar ao início

A-01 – Antes de começarmos a utilizar o git façamos as configurações globais locais.

Mas ainda antes, deixarei uma observação feita na documentação oficial do Git sobre configurações locais.

Caso você queira sobrepor estas com um nome ou endereço de e-mail diferentes para projetos específicos, você pode executar o comando sem a opção –global quando estiver no próprio projeto.

Repare que risquei o termo globais no título porque tive problemas ao tentar sobrepor estas configurações quando precisei utilizar múltiplos contextos do Git (explico melhor sobre o assunto adiante) e por isso somente recomendo utilizar configuração de repositório local. Portanto agora sim, prossiga.

O user name:


git config --local user.name "Meu Lindo Nome"

A-02 – E o email:


git config --local user.email meulindoemail@centraldeemailslindos.com

B – Criando um repositório local com o intuito de versioná-lo em um repositório remoto que já existeVoltar ao início

B-01 – Para iniciarmos o repositório que queremos trabalhar e depois empurrá-lo para nosso servidor git, primeiramente devemos iniciar o nosso repositório git. Por ora saberemos também que será criada a nossa branch master (mais à frente veremos o que são branches, como utilizar mais de uma ao mesmo tempo e o que você ganha fazendo isso).

git init

B-02 – Adicione a origem de seu repositório remoto que irá utilizar. Provavelmente este repositório remoto lhe informará qual o comando correto para você adicioná-lo e você vai ter de se informar sobre isso. Para te ajudar coloquei dois comandos abaixo de como podem se parecer.


git remote add origin https://github.com/blogmastigado/projetoandroid.git


git remote add origin ssh://github.com/blogmastigado/projetoandroid.git

B-03 – Depois de criado, podemos ver o que tem (e como está) dentro de nosso repositório como o comando abaixo.

git status

O comando git status nos mostra:

Mostra quais são os arquivos que estão fora do controle de versão do git (untracked files).

B-04 – Para adicionar os arquivos em meu controle de versão para que passem a ser “versionados” utilizamos o comando git add (git add nome_do_arquivo_a_ser_versionado). Com este comando, você adiciona as pastas que deseja ao controle de versão. Porém se você digita .(espaço e ponto) após o comando, ele pega tudo que está dentro do diretório em que você está se encontra no momento.

O git add significa que os seus arquivos estão preparados para serem comitados e ao invés de os arquivos estarem listados como untracked files, serão listados como new file(novo arquivo).

git add .

Se você der o comando git status (novamente) depois de git add, ele mudará de estado para mostrar os arquivos que estão para serem comitados.

B-05 – Commit! Logo após que você adiciona os seus arquivos para serem “comitados” com o comando git add é hora de utilizar o comando commit:


git commit -m "O meu primeiro commit no git"

E por que fazer o commit?

Toda a vez que você altera um arquivo, você “comita”, ou seja, você grava aquela versão.
Quando você digita git commit -m, você está informando que vai deixar uma mensagem de identificação sobre a versão que você está gerando.

Após executar o comando, ele irá gerar um código para este seu commit(algo como: master (root-commit) 4d68ec3] “O meu primeiro commit no git”).

Você também pode dar um git status para ver como as coisas estão saindo. Possivelmente ele irá dizer que não será preciso fazer mais nada porque tudo o que foi marcado para ser “comitado”, já foi comitado.

B-06 – E para colocar os meus arquivos lá no meu servidor git remoto?

Para empurrar os arquivos versionados pelo meu commit anterior utilizo-me dos comandos abaixo.

git push -u origin master

Caso Problemas de autenticação com erro 403

Repare que pode existir endereço com https ou http, porém as vezes você pode ser supreendido com um erro do tipo “remote: Access denied” junto com “The requested URL returned error: 403”.
Para resolver este tipo de problema alguns indicam seguir no diretório/caminho .git/config que está dentro da raiz do seu projeto git, abra o arquivo config e altera o parâmetro http ou https do atributo url para ssh, depois salve, feche o arquivo e tente novamente enviar para o servidor remoto.

CO que são branches e para que precisamos gerenciá-las! – Voltar ao início

Até agora só trabalhamos com uma branch chamada de master e ela é praticamente a branch padrão que todo repositório git cria quando ele é iniciado com o comando git init. Por vezes trabalhamos em equipe e deixar que todos modifiquem o mesmo código pode dar problema e por isso devemos ter o hábito de criar uma ou mais branchs além da master e gerenciá-las de forma adequada.

Como dito antes, gerenciar branches é necessário quando se trabalha em equipe porque cada um costuma ter uma responsabilidade própria. E quando você cria uma nova branch a partir de uma já existente, está dizendo que vai pegar tudo o que você fez naquela branch atual que está trabalhando (no nosso caso é a master) e colocar numa nova branch de forma igualzinha, bonitinha e cheirozinha como já estava antes, sacou? Você faz um clone do estado atual de sua branch para uma outra e esse tipo de processo é o que chamamos de fork. E a partir deste raciocínio você tem duas opções para começar a trabalhar em outra branch. São elas:

C-01A primeira opção é criarmos uma nova branch, mas você só consegue fazer isso se na sua branch atual já tiver adicionado alguns arquivos à sua staged área (se você não sabe o que é isso recomendo ler o tópico Estrutura básica do git logo no início deste tutorial) e logo em seguida ter dado um commit nesses arquivos. Por ora vamos criar uma branch executado o comando abaixo.


git branch novabranch

C-02A segunda opção é você acessar um diretório remoto partindo do princípio que você seguiu os passos do item B-02 e adicionou um repositório remoto como a origin do nosso repositório git local. Portanto neste caso supomos que você tem uma branch neste repositório que você adicionou e queremos acessá-la. Para isso utilizamos o comando abaixo.

git checkout -b origin minhabranchremota

ou

 
git checkout minhabranchremota 

E em seguida pegar os arquivos contidos nela e trazer para o nosso repositório local.

git pull

C-03 – E para listar e trocar de branch?

Caso precisemos listar as branches que temos acesso localmente podemos utilizar do comando git branch. Desta forma:

git branch

Em seguida nos será listado as branchs que temos disponíveis. Algo como isso:

$ git branch
 master
* novabranc

ou

$ git branch
 master
* origin/minhabranchremota

E para trocarmos de branch utilizamos do comando git checkout nome_da_branch_que_quero_intercalar.

git checkout novabranch
git checkout minhabranchremota

D – Clonando repositórios remotos para trabalharmos em cima deles

Pois bem, sabe quando já criamos um repositório remoto e ele já contém algum arquivo lá dentro e queremos enviar nossas modificações para ele? Difícil né? Mais adiante falaremos sobre como mesclar, juntar, “merjar” essas diferenças entre o que está no nosso repositório local e o que foi colocado no repositório remoto após criarmos um repositório local sem antes ver o que já existia no remoto ou quando pegamos as últimas alterações de um remoto e nesse meio tempo alteramos ainda mais coisas lá no remoto enquanto ainda nem enviamos as alterações feitas no nosso repositório local. Então por ora iremos nos ater apenas a iniciar um repositório a partir de um clone de um remoto.

D-01 Quando formos começar a codificar algo a partir de um clone, esqueça as configurações iniciais do git, apenas utilize o comando para clonar o repositório e comece a trabalhar nele normalmente.

 
git clone https://github.com/blogmastigado/projetoandroid.git

E é isso.

DICAS DIVERSAS

Para caso aconteça um problema de autenticação (erro 403) seja nos repositórios do GitLab

01 – Verifique se já existe uma chave em seu SO.

Para Windows faça:

type %userprofile%\.ssh\id_rsa.pub

Ou pode utilizar o Git Bash no Windows, GNU/Linux, macOS, PowerShell:

type %userprofile%\.ssh\id_rsa.pub

O teste acima é meramente ilustrativo porque estou contando que esta chave já existe, por isso não vou deixar aqui como gerá-la (todas estas informações estão em http://seu_servidor_gitlab/help/ssh/README).

02 – Para copiar esta chave existente para o GitLab

No Windows:

type %userprofile%\.ssh\id_rsa.pub | clip

No Mac OS:

pbcopy < ~/.ssh/id_rsa.pub

No GNU/Linux (requer que o pacote xclip esteja instalado):

xclip -sel clip < ~/.ssh/id_rsa.pub

Para o Git Bash no Windows / Windows PowerShell:

cat ~/.ssh/id_rsa.pub | clip

03 – Depois siga para o Gitlab

Após executado os comandos acima siga para o Gitlab, Profile e Keys. Cole a chave lá e clique em Add Key.
Se ainda tiver problema no seu repositório, readicione-o com as informações contidas em seu repositório remoto no Gitlab.

DICAS DIVERSAS (para quando você estiver agarrado em alguma coisa)

Para apagar algumas configurações globais que podem te atrapalhar quando você trabalha com múltiplos contextos

Pois bem, por vezes trabalhamos com múltiplos contextos de git (mais precisamente múltiplas contas de email) e nessas horas podemos esbarrar em problemas de autenticação ao fazer push (unable to access, The requested URL returned error: 403) mesmo com o nosso repositório estando com configurações locais corretas. Então neste caso você pode executar os comandos abaixo.

Este primeiro para indicar que queremos que o usuário utilize-se apenas das configurações locais.

git config --global user.useConfigOnly true

A segunda para limpar as configurações globais se existirem

git config --global --unset user.name
git config --global --unset user.email

A terceira será para limpar as informações de credenciais globais guardadas

git config --global --unset credential.helper

E por fim, a última é para apagar as informações de credenciais contidas no sistema (este comando realmente resolveu meu problema), só que para executar este comando você deverá estar logado no Git Bash como usuário administrador.

git config --system --unset credential.helper

Pronto. Agora é só executar o git push normalmente que provavelmente será pedido login e senha.

Para listar as configurações do Git

 
git config --list

Ou

 
git config --list --show-origin

Lembrando que a parte das configurações locais listadas estão contidas no arquivo .git/config que está dentro do seu repositório local e portanto também podem serem editadas por um editor de texto como um Notepad.

Para checar a versão do seu Git

 
git --version

Para certificar-se que se certificar de que a origem foi obtida

 
git fetch origin

Para visualizar informações de seu repositório remoto

 
git remote -v 

Para visualizar informações se foi obtida as ramificações de seu repositório remoto

 
git remote -avv 

Para remover o repositório origin

 
git remote remove origin 

Para armazenar suas credenciais de repositório

Digite o comando para armazenar a credencial localmente e depois para enviar os arquivos para o repositório remoto.

 
git config credential.helper store
git push http://example.com/repo.git 

Em seguida serão pedidos usuário e senha para seu repositório remoto apenas uma vez.

 
Username: <digite seu username>
Password: <digite seu password>

Para reconfigurar a url do seu repositório remoto

 
git remote set-url origin https://github.com/blogmastigado/projetoandroid.git

Para armazenar configurações de credenciais por um tempo definido

No caso abaio irá armazenar por 60 minutos.

 
git config credential.helper 'cache --timeout=3600'

Para forçar o envio do repositório local à sua origin

git push -u --force origin master

Para descobrir o local onde está o arquivo de configuração global

No Windows 7 comumente no caminho abaixo.

C:\Users\MyLogin\.gitconfig

Ou você pode executar o comando abaixo e observar onde está localizado o arquivo .gitconfig

git config --list --show-origin

A respeito deste comando (–force)

Em virtude do erro: “! [rejected] master -> master (fetch first) error: failed to push” é provável que o comando push não seja o adequado no momento.
A resposta está lá, o git está dizendo para você buscar primeiro (primeiro o pull). Provavelmente alguém mais já enviou para a origin (fez o push). Consequentemente você tem que buscar (fazer o pull), mesclar o changeset (fazer o merge), daí você poderá empurrar (fazer o push) outra vez.
Se você não conseguiu fazer normalmente o push e “forçou a barra para fazer” (se fizer usando a opção –force), você pode estragar o histórico de alterações (na verdade provavelmente você irá estragar esta linha do tempo).

Para maiores detalhes você pode consultar este post do StackOverflow que foi de onde retirei esta bela explicação sobre o uso forçar o push em um repositório.
fonte: http://stackoverflow.com/questions/28429819/rejected-master-master-fetch-first

Essa fonte abaixo foi uma das minhas fontes de inspiração e meu ajudou muito (dêem uma força para o canal do RB Tech)
fonte: https://www.youtube.com/playlist?list=PLInBAd9OZCzzHBJjLFZzRl6DgUmOeG3H0

fonte: https://mastigado.wordpress.com

fonte: https://blog.da2k.com.br/2015/02/04/git-e-github-do-clone-ao-pull-request/

fonte: https://git-scm.com/book/pt-br/v1/Git-Essencial-Obtendo-um-Reposit%C3%B3rio-Git

fonte: https://git-scm.com/book/pt-br/v2/Git-Branching-Branch-Management

fonte: https://git-scm.com/book/pt-br/v1/Primeiros-passos-Configura%C3%A7%C3%A3o-Inicial-do-Git

fonte: https://git-scm.com/docs/git-credential-store

fonte: https://collectiveidea.com/blog/archives/2016/04/04/multiple-personalities-in-git

fonte: https://stackoverflow.com/questions/15381198/remove-credentials-from-git

fonte: https://stackoverflow.com/questions/2114111/where-does-git-config-global-get-written-to

Anúncios
%d blogueiros gostam disto: