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:
- Controle de versão
- Armazenamento em nuvem
- Trabalho em equipe
- Melhorar seu código
- 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:
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.
Assim que o frango estiver bem cozido, acrescente o molho de tomate, o ketchup, a mostarda e champignon a gosto.
Abaixe o fogo e coloque o creme de leite e mexa bem até se tornar um creme homogêneo.
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).
- $ git init: Cria um repositório no git dentro de uma determinada pasta.
- 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
Remote Repository
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).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.gitAdicionamos a origem:
originé um apelido do link do repositório remoto.git remote add origin https://github.com/fapers/livro-receitas.gitAlgumas 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)
Verificando se o repositório local não tem pendências.
$ git status
On branch master nothing to commit, working tree cleanEmpurrando 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 -> masterNo GitHub na base do repositório
livro-receitasbranch 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.
# 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
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
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:
A separação dos ambientes git
Servidor
Ambiente de desenvolvimento
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"
Entre no site do , 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
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.
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
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
Postar um comentário
Deixe seu comentário: