Pular para o conteúdo principal

Git e GitHub

Git e Git Hub

O git foi criado em 2005 pelo Linus Torvalds (criador do kernel Linux).

Git e GitHub são duas tecnologias diferentes.

O Git é opensource.

Benefícios com o uso do GitHub:

  1. Controle de versão
  2. Armazenamento em nuvem
  3. Trabalho em equipe
  4. Melhorar seu código
  5. Reconhecimento

Git é um sistema de versionamento de código distribuído.

GitHub é um servidor remoto para armazenamento de código.

Navegação via command line interface e instalação

GUI(Graphical User Interface) x CLI(Command-line Interface)

A forma de interação com o git é por linha de comandos (command line interface). O que vai ser abordado neste arquivo?

  • Mudar de pastas
  • Listar as pastas
  • Criar pastas/arquivos
  • Deletar pastas/arquivos

Para quem usa Windows (shell)

  • cd
  • dir
  • mkdir
  • del / rmdir

Para quem utiliza Unix (bash)

  • cd
  • ls
  • mkdir
  • rm -rf

Para listar arquivos no windows (cmd) utilizamos o comando dir e no linux (terminal) utilizamos o comando ls.

Entrar numa pasta específica, tanto windows quanto linux se utiliza o comando cd.

Limpar a tela no windows cls e no linux clear ou atalho ctrl+L.

Acessar uma pasta com nome grande pode começar digitar e pressionar a tecla Tab.

Criar uma pasta tanto windows quanto linux é mkdir directory_name.

Criar um arquivo no windows e no linux podemos utilizar o comando echo hello > hello.txt.

Deletar um arquivo no windows utilizamos o comando del file_name e um diretório rmdir directory_name /S /Q.

Deletar um arquivo ou uma pasta com arquivos no linux utilizamos o comando rm -rf directory_name.

Instalação do Git

  • Acesse o site: GIT.
  • Faça o downloads do git para o sistema operacional correspondente.
  • Faça a instalação padrão.

Entendendo como o Git funciona

SHA1: A sigla sha significa Secure Hash Algorithm (Algoritmo de Hash Seguro), é um conjunto de funções hash criptográficas projetadas pela NSA (Agência de Segurança Nacional dos EUA). A encriptação gera conjunto de characteres identificador de 40 dígitos. É uma forma curta de representar um arquivo. Exemplo: echo "ola mundo" | openssl sha1. Será retornado uma string com 40 dígitos hexadecimais.

Objetos fundamentais:

  • BLOBS (bolhas): São arquivos (sha1 do arquivo. Tem um tamanho 42, guarda metadados do git. Guarda o sha1 do arquivo. Exemplo: $ echo 'conteudo' | git hash-object --stdin; $ echo -e 'blob conteudo' | openssl sha1
  • TREES (arvores): Aponta para o blob. Armazena e aponta para tipos diferentes de blob que por sua vez tem sha1. Uma árvore pode apontar para outra árvore.
  • COMMITS: Dá significancia ao arquivo. É o objeto mais importante junta tudo pois aponta para uma árvore, um parente (último commit), um autor ou uma mensagem. O commit possui um timestamp (carimbo de tempo). Os commits também possui uma criptografia sha1. Se mudar qualquer coisa num arquivo, ele altera a bolha a qual altera uma árvore e acaba alterando um commit.

Sistema distribuído: É um sistema que possui múltiplas cópias de si mesmo em diferentes locais. Se um repositório de um sistema tenha umas 40 pessoas contribuindo e pelo fato de um commit ser muito difícil de ser alterado, se der um problema na nuvem no git o código das outras 40 pessoas serem confiáveis então para dá um problema num repositório só se acontecer problemas em todos os 40 contribuintes.

Segurança: O objetos estão ligados de maneira encadeada e de difícil alteração. O sistema git é muito seguro.

Primeiros comandos com o GIT

INICIAR O GIT: $ git init; Inicia um repositório git.

INICIAR O VERSIONAMENTO: $ git add "arquivos ou * para todos"; Inicia um versionamento git.

CRIAR UM COMMIT: $ git commit -m "mensagem"; Cria um commit.

Exemplo prático

  • Abra o Git Bash no Windows, ou outro sistema operacional. Entre no diretório principal com o comando
  • Crie uma nova pasta com o comando $ mkdir workspace dentro da raiz do sistema (no exemplo c:). Dentro da pasta workspace crie uma nova pasta chamada livro-receita com o comando $ cd workspace; mkdir livro-receita
  • Entre na pasta livro-receita e inicie o git dentro da pasta com o comando $ cd livro-receita; git init
  • Exiba todos conteúdos da pasta livro-receita com o comando $ ls -a, observe que agora existe uma pasta chamada .git. Entrando nessa pasta podemos ver que existem várias outras pastas e arquivos comandos $ cd .git e $ ls -a.
  • Voltando um nível vamos criar um arquivo diferente Markdown $ cd ..; touch strogonoff.md. Abra o arquivo num editor markdown como o programa Typora, no entanto vamos utilizar o editor nano, comando $ nano strogonoff.md e entre com as informações:
    • # Strogonoff de Frango 🐔 ## Ingredientes\ - 1 quilo de peito de frango sem pele - 1 tablete de caldo de galinha - 3 colheres de sopa de óleo - 2 latas de creme de leite sem soro - 2 colheres de sopa de molho de tomate - 2 colheres de sopa de ketchup - 2 colheres de sopa de mostarda - champignon - Batata palha e arroz branco para acompanhar ## Modo de Preparo

      1. Em uma panela a fogo médio, acrescente o óleo e o caldo de galinha e, dissolva o caldo. Logo em seguida coloque o frango picado em cubos na panela e deixe cozinhar, sempre dando uma olhadinha para não queimar.

      2. Assim que o frango estiver bem cozido, acrescente o molho de tomate, o ketchup, a mostarda e champignon a gosto.

      3. Abaixe o fogo e coloque o creme de leite e mexa bem até se tornar um creme homogêneo.

      4. Está pronto para servir.

      • Pressione as teclas ctrl+o para salvar e ctrl+x para sair do nano.
      • Existem vários tipos de formatação de arquivos.
      • Markdown: Utiliza a cerquilha para representar os títulos com seus níveis. Exemplo: # Título nível 1; ## Título nível 2; ### Título nível 3; #### Título de nível 4; ##### Título de nível 5; ###### Título de nível 6.
      • ** Negrito **
      • _itálico_
      • espaço - espaço, cria uma lista(ponto).

      Navegador: A exibição de títulos no navegador aparece como exemplo: Título nível 1 maior que Título nível 2, e assim por diante.

      Codificação HTML: Na codificação html utilizamos: h1 Título nível 1 para representar um título nível1 que também pode ser utilizado em arquivos Markdown, não usual.

      Comandos básicos do git

      Antes de criar nosso arquivo de exemplo executamos o comando: $ git init para iniciar um repositório.

      Após o arquivo criado, dentro da pasta livro-receita digite o comando: $ git status e depois para adicionar todos arquivos criados ou modificados digite o comando $ git add * no terminal.

      Execute o comando $ git commit -m "commit inicial" para fazermos o nosso primeiro commit no repositório git local.

      Ciclo de vida dos arquivos

      Terminologia correta dos comandos

      • $ git init: Cria um repositório no git dentro de uma determinada pasta.

      Conceitos de Tracked e Untracked

      Untracked: Arquivos que não conhecemos, um arquivo que acabamos de criar. Exemplo: criamos um arquivo na aula anterior, ele estava em Untracked, após digitamos o comando $ git add *, o arquivo foi movido para Tracked, direto para Staged

      Tracked: Arquivos que conhecemos. Subdivide em três estágios diferentes:

      • Unmodifield: Ainda não foi modificado. Exemplo: Tem um arquivo no repositório do git que ainda não sofreu modificação, então ao abrir o arquivo e fazermos modificações e salvar, o git vai comparar o sha1 do arquivo e vai descobrir que o arquivo tem modificações e o envia para Modified. Se temos um arquivo Unmodified e o removermos ele vai para Untracked
      • Modified: Arquivo que houve modificação. Se rodarmos o comando $ git add * novamente, o arquivo vai para o Staged
      • Staged: Conceito chave, ficam os arquivos que estão se preparando para fazer parte de outro tipo de agrupamento. Os arquivos ficam aguardando. Quando colocamos os arquivos no Staged eles ficam aguardando um commit, passando os arquivos para Unmodified

      A separação dos ambientes git

      Servidor

      • Remote Repository

      Ambiente de desenvolvimento

      • Working Directory: Repositório de trabalho.

      • Staging Area: Onde os arquivos ficam aguardando um commit.

      • Local Repository: Quando damos um commit num arquivo, ele passa a fazer parte do repositório. .git. O repositório local é populado por commits (enviar os arquivos para o repositório).

      Comandos de uso frequente

      git status: Ajuda a monitorar os status dos arquivos. Informa se o arquivo está Untracked, Tracked. Exemplo de saída:

      $ git status On branch master nothing to commit, working tree clean

      mkdir: Cria uma pasta no repositório local.

      $ mkdir receitas

      ls: Exibe os arquivos e diretórios dentro do repositório atual.

      $ ls receitas/ strogonoff.md

      mv: Move arquivo(s) para um diretório específico.

      $ mv strogonoff.md ./receitas/

      ctrl+L: Limpa a tela do Git Bash. Pode ser utilizado também o comando:

      $ clear

      cd: Comando para percorrer os diretórios.

      xxx@x MINGW64 /c/workspace/livro-receitas (master) $ cd receitas/

      xxx@x MINGW64 /c/workspace/livro-receitas/receitas (master) $ ls strogonoff.md

      cd ..: Volta ao nível anterior

      ./livro-receitas/receitas (master) $ cd ..

      ./livro-receitas (master) $ ls receitas/

      git status: Utilizando o comando após mover o arquivo para uma outra pasta. A saída será:

      $ git status On branch master Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) deleted: strogonoff.md

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

      no changes added to commit (use "git add" and/or "git commit -a")

      git add strogonoff.md receitas/: Modifica o status do arquivo para staged.

      $ git add strogonoff.md receitas/

      git status: Caso desejarmos restaurar o status de um arquivo utilizamos o git restore --staged <nome do arquivo>.

      $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) renamed: strogonoff.md -> receitas/strogonoff.md

      git commit -m "mensagem": Finaliza o status do arquivo.

      $ git commit -m "cria pasta receitas, move arquivo para receitas" [master ec5af20] cria pasta receitas, move arquivo para receitas 1 file changed, 0 insertions(+), 0 deletions(-) rename strogonoff.md => receitas/strogonoff.md (100%)

      git status

      $ git status On branch master nothing to commit, working tree clean

      echo > README.md: Cria um novo arquivo vazio.

      $ echo > README.md

      git add .: Adiciona todas as modificações do repositório local para o Staging Area.

      git commit -m "mensagem": Quando usamos um commit e passamos uma mensagem, o que está realmente acontecendo é que todos os arquivos que estavam num Staging foram envelopados numa mensagem dando significância a ele e criou um objeto chamado commit.

      GitHub

      Entre no site do GitHub, clique em fazer login Sign in, entre com suas credenciais ou clique no link Create an account para criar uma nova conta.

      Para utilizar o GitHub juntamente com o git local, é necessário que as configurações sejam iguais.

      git config --list: Traz a lista de todas as configurações do git local. Procure utilizar o mesmo email e name para evitar problemas.

      user.email=<o email do usuário> user.name=<usuário>

      Para resetar as configurações de usuário e email do git:

      git config --global --unset user.email: Remove o user.email.

      git config --global --unset user.name: Remove o user.name

      Para refazer as configurações de usuário e email do git:

      git config --global user.email "meu email": Remove o user.email.

      git config --global user.name "meu usuário": Remove o user.name

      Criando um novo repositório no GitHub

      • Acesse a sua conta no GitHub, confira suas credenciais no git local para ver se está utilizando o mesmo usuário e email.

      • Acesse seus repositórios do GitHub e cria um novo. Para esse exemplo, vamos dá o nome de livro-receitas. Será um repositório público sem muitas informações.

      • Copie o endereço gerado após a criação do repositório no GitHub.

        https://github.com/seu-usuário/livro-receitas.git

      Enviando os commits do repositório local para o remoto

      Todos os arquivos commitados até agora estão em um repositório local .git, e o que poderá ser feito agora é empurrar para o repositório remoto.

      1. Adicionamos a origem: origin é um apelido do link do repositório remoto.

        git remote add origin https://github.com/fapers/livro-receitas.git

      2. Algumas informações: Lista de repositórios cadastrados.

        $ git remote -v origin https://github.com/fapers/livro-receitas.git (fetch) origin https://github.com/fapers/livro-receitas.git (push)

         

      3. Verificando se o repositório local não tem pendências.

        $ git status
        On branch master nothing to commit, working tree clean  

      4. Empurrando os arquivos do repositório local para o repositório remoto.

        $ git push origin master
        Enumerating objects: 8, done.
        Counting objects: 100% (8/8), done.
        Delta compression using up to 12 threads
        Compressing objects: 100% (6/6), done.
        Writing objects: 100% (8/8), 1.16 KiB | 1.16 MiB/s, done.
        Total 8 (delta 0), reused 0 (delta 0), pack-reused 0
        To https://github.com/fapers/livro-receitas.git
        [new branch] master -> master 

      5. No GitHub na base do repositório livro-receitas, podemos ver muitas informações sobre o repositório. Clicando do lado direito do commit onde aponta o número de commits podemos acompanhar todos os commits do arquivo.

      Resolvendo Conflitos

      Quando temos um código no GitHub e baixamos para nossa máquina, o código local corresponde exatamente a versão no GitHub, agora imaginamos que uma outra pessoa queira contribuir com o código, então faz uma clonagem do repositório, nesse momento o código do GitHub é o mesmo das duas máquinas. O outro usuário faz algumas alterações e submet ao GitHub, suponhamos que a edição estão sendo feitas na mesma linha, ao submeter o código ao GitHub o código local é mais antigo que o código do GitHub, há um conflito.

      Quando há qualquer alteração no arquivo do GitHub diferente do repositório local, um conflito é exibido com uma mensagem de erro ao digitar o comando git push origin master.

      $ git push origin master To https://github.com/fapers/livro-receitas.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://github.com/fapers/livro-receitas.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

      Utilize o comando: git pull origin master para resolver o conflito, quando isso ocorre é porque alguém fez alterações que estão diferentes do que consta no repositório local.

      $ git pull origin master remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 676 bytes | 112.00 KiB/s, done. From https://github.com/fapers/livro-receitas

      • branch master -> FETCH_HEAD 76848e9..5ed3cab master -> origin/master Auto-merging README.md CONFLICT (content): Merge conflict in README.md Automatic merge failed; fix conflicts and then commit the result.

      Ao abrir o arquivo com conflitos acima da linha representa as alterações locais e abaixo da linha representam as alterações remota.

      Clonagem de repositório

      Para clonar um repositório para um diretório local utilizamos o comando git clone url.git

      $ git clone https://github.com/python/cpython.git

      Podemos ver que o repositório clonado não é um diretório comum.

      ls -a

      Para saber para onde o repositório está apontando podemos acessar o repositório local e utilizar o comando:

      $ git remote -v origin https://github.com/python/cpython.git (fetch) origin https://github.com/python/cpython.git (push)

       

Comentários

Postagens mais visitadas deste blog

DIO (Digital Innovation One)

O que é a Digital Innovation One? A Digital Innovation One é uma comunidade com mais de trezentos mil desenvolvedores de software que acelera gratuitamente a carreira de qualquer pessoa interessada em cursos, bootcamps, projetos práticos e desafios, possibilitando a conquista de melhores oportunidades profissionais em várias empresas do mercado de trabalho. Por que os cursos são gratuitos? A Digital Innovation One acredita que a democratização do ensino de tecnologia e a formação da nova geração de desenvolvedores de software impacta positivamente o desenvolvimento socioeconômico mundial. Estão revolucionando a educação online com a democratização e inclusão através do ensino online gratuito e de qualidade, juntamente com as empresas mais inovadoras do mercado que procuram pelos desenvolvedores de software mais talentosos. (DIO, 2021) Na DIO, várias empresas procuram por profissionais talentosos, no entanto, possuem muitas vagas de empregos e muitas das vezes os processos seletivos são...

Linux 4/8

  Fundamentos e comandos de redes Rede de computadores é um conjunto de equipamentos interligados de maneira a trocarem informações e compartilharem recursos, como arquivos de dados gravados, impressoras, modems, softwares e outros equipamentos. (Sousa, 1999). Rede Wan: Wide Area Network, é uma rede geograficamente distribuída. Rede Man: Metropolitan Area Network, é uma rede metropolitana que interligam várias redes locais. Rede Lan: Local Area Network, é uma rede local de uma forma geral em um único prédio ou campus. Protocolos É uma linguagem utilizadas pelos dispositivos para que eles possam se entender. IP: Protocolo de Internet - endereço IP - números que identificam seu computador em uma rede. ICMP: Internet Control Message Protocol - tem por objetivo prover mensagens de controle na comunicação entre nós. DNS: Domain Name Server - esse protocolo de aplicação tem por função identificar endereços IPs e manter uma tabela com os endereços dos caminhos de algumas redes. Interface ...

Curso Inter Java Developer

O que já aprendi no curso Inter Java Developer da DIO (Digital Innovation One? É um curso intermediário com 23 atividades e carga horária de 95 horas. Boas vindas ao Bootcamp Inter Java Developer Bem vindo à DIO Linux: A introdução ao sistema operacional Shell Script - Manipulando arquivos Introdução ao Git e ao GitHub