Saindo do zero
Vanilton Pinheiro
Pinheiro
# O que vamos precisar
# O que vamos precisar
Sistema de Versão
Git
Configuração Git
Remoto
Versionando
Interface Gráfica
# O que veremos
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
Source Code Control System (SCCS)
Marc Rochkind desenvolveu o SCCS em SNOBOL4 no Bell Labs para um computador IBM System/370 rodando OS/360 MVT
* Código proprietário
Revision Control System (RCS)
Lançado por Walter F. Tichy, enquanto ele estava na Universidade de Purdue, como uma alternativa livre e mais evoluída para o então popular Source Code Control System (SCCS)
* Código aberto
Concurrent Version System (CVS)
Dick Grune "Criei o CVS para poder cooperar com meus alunos Erik Baalbergen e Maarten Waage no ACK (Amsterdam Compiler Kit) Compilador C."
* Código aberto
# 1 INTRODUÇÃO
Subversion (SVN)
Fundado pela CollabNet, Inc., o projeto e o software Subversion tiveram um sucesso incrível na última década.
* Código aberto
BitKeeper SCM
é um sistema de controle de versão distribuído, o primeiro beta utilizável estava disponível em Maio de 1999 e em 4 de Maio de 2000, o primeiro lançamento público do BitKeeper se fez disponível
* Código aberto
Mercurial
é uma ferramenta multiplataforma de controle de versão distribuído para desenvolvedores de software. O criador e desenvolvedor líder do Mercurial é o Matt Mackall
* Código aberto
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
Control de Histórico e Rastreabilidade
Trabalho em Equipe
Marcação e Ramificação
Organização
Confiança
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
Quais vantagens e problemas possuímos nesse sistema?
# 1 INTRODUÇÃO
Quais vantagens e problemas possuímos nesse sistema?
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
# 1 INTRODUÇÃO
Quais vantagens e problemas possuímos nesse sistema?
# 1 INTRODUÇÃO
| Ponto de Vista | Vantagens | Desvantagens |
|---|---|---|
| Desenvolvedor | Rapidez | Necessidade de maior conhecimento da ferramenta e do processo |
| Autonomia | ||
| Coordenação/Gerência do Time | Redução de custos com servidor e infraestrutura externa de rede | Necessidade de maior capacitação de desenvolvedores |
| Confiabilidade | Importante ter um fluxo de trabalho bem definido |
Sistema de Versão
Git
Configuração Git
Remoto
Versionando
Interface Gráfica
# 2 Git
2005
Git é um sistema de controle de versões distribuído, usado principalmente no desenvolvimento de software, mas pode ser usado para registrar o histórico de edições de qualquer tipo de arquivo.
O Git foi baseado na ferramenta proprietária chamada BitKeeper
# 2 Git
# 2 Git
"Eu sou um desgraçado egocêntrico, então batizo todos os meus projetos com meu nome. Primeiro Linux, agora Git."
— Linus Torvalds
# 2 Git
O Git é um software livre, distribuído sob os termos da versão 2 da GNU General Public License. Sua manutenção é atualmente supervisionada por Junio Hamano.
# 2 Git
# 2 Git
# 2 Git
GitLab
# 2 Git
GitLab
# 2 Git
# 2 Git
# 2 Git
# 2 Git
O formato do objeto dos arquivos de repositório do Git usa uma combinação de codificação delta (armazenamento de diferenças de conteúdo)
v1
src/code.py
work
src/code.py
# 2 Git
Prepara
Valida
Envia para o git
Sistema de Versão
Git
Configuração Git
Remoto
Versionando
Interface Gráfica
# 3 Configuração
A leitura da configuração é realizada de modo hierárquico
Primeiro aqui
Segundo aqui
Terceiro aqui
# 3 Configuração
$ git config --list
credential.helper=osxkeychain
alias.tree=log --graph --decorate --pretty=oneline --abbrev-commit
core.excludesfile=/Users/vaniltonpinheiro/.gitignore_global
core.autocrlf=input
difftool.sourcetree.cmd=opendiff "$LOCAL" "$REMOTE"
difftool.sourcetree.path=
mergetool.sourcetree.trustexitcode=true
user.name=Vanilton Pinheiro
user.email=vanilton.pinheiro@fpf.br
commit.template=/Users/vaniltonpinheiro/.stCommitMsg# 3 Configuração
$ git config --global user.name "Vanilton Pinheiro"
$ git config --global user.email vanilton.pinheiro@fpf.brImpacta no histórico do commit
Independe de como foi clonado o repositório ou se foi feito pull
E o que isso impacta?
Identificando o usuário
# 3 Configuração
$ git config --global core.editor "nano"Que tal alterar o editor padrão utilizado pelo git?
# 3 Configuração
Vamos definir a branch padrão ao criar repositórios git
$ git config --global init.defaultBranch main# 3 Configuração
# 3 Configuração
$ git init
# 3 Configuração
$ git config user.name "Vanilton de S. F. Pinheiro"As demais configurações serão do global
# 3 Configuração
Branch (local)
Repositório git
Sistema de Versão
Git
Configuração Git
Remoto
Versionando
Interface Gráfica
# 4 Versionando
Estou na brach master
Nenhum commit ainda
Existe arquivos não rastreados
Arquivos identificados
Nada em Stage
# 4 Versionando
Adicionando na Stage
Removendo da Stage
# 4 Versionando
Agora temos o commit e o status não possui nada para comitar
Vamos testar apenas com "git commit"
# 4 Versionando
Histórico de commits
Mensagem do commit
Utilizou o nome da configuração de perfil do projeto
Nosso primeiro ponto na árvore de commit
Commit Hash - SHA-1
# 4 Versionando
$ git log --pretty=format:"%h - %an - %ar : %s"%h - Hash do commit abreviado
%an - Nome do Autor
%ar - Data relativa do commit
%s - Mensagem do commit
# 4 Versionando
$ git log -3
$ git log --stat
$ git log --pretty=oneline --reverse
$ git log --pretty=oneline --reverse -2
$ git log --since=2.weeks
$ git log --since=2.days
$ git log --since=23.hourExperimente
# 4 Versionando
M - Modificação
(simbolizado por vermelho)
Visão curta (short)
# 4 Versionando
Modificações desfeitas para a última versão comitada no repositório local
# 4 Versionando
Modificações desfeitas para a última versão comitada no repositório remoto
# 4 Versionando
Altere o arquivo README.md conforme abaixo
Adiciona todos arquivos da área no commit
# 4 Versionando
$ git add *.md
$ git add git-*.sh
$ git add script/\*.js
$ git add arquivo1 arquivo2 arquivo3Inclui todos arquivos com extensão .md
Inclui todos arquivos iniciados por "git-" seguidos de qualquer texto e na extensão .sh
Inclui todos arquivos do diretório e subdiretórios script seguidos na extensão .js
Incluindo arquivos individualmente
# 4 Versionando
git commit --amend
git commit --reset
# 4 Versionando
Altere a mensagem do commit "Primeiro commit corrigido"
Verde (em Stage)
# 4 Versionando
?? (Novo arquivo no repositório)
Obs: amend é sempre no último commit
# 4 Versionando
Redefine o HEAD atual para o estado especificado
# 4 Versionando
Duas maneiras simples
$ git reset HEAD~1 --soft
$ git checkout HASH_COMMIT Coloca o HEAD um commit atrás do atual (~1)
Iremos reforçar na seção de Interface Gráfica :)
Coloca o HEAD um commit atrás do atual
# 4 Versionando
Vamos simular a necessidade de ignorar arquivos que não necessitam ser enviados para o repositório git.
Vamos criar uma pasta chamada libs e incluir dois arquivos nela.
Para ignorar vamos criar o arquivo .gitignore e definir o que gostariamos de ignorar
# 4 Versionando
O .gitignore usa padrões globbing para fazer a comparação dos nomes de arquivos. Ex:
# 4 Versionando
Importante comitar o .gitignore
# 4 Versionando
$ echo debug.log >> .gitignore
$ echo '*.txt' >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git rm --cached nome.txt
rm 'nome.txt'
$ git add .gitignore
$ git commit -m "Ignorando debug.log e arquivos .txt"Vamos criar os arquivos chamado debug.log e nome.txt, em seguida commitar
Vamos realizar o processo para remover.
# 4 Versionando
$ git log -p
$ git log -p -2 #últimos 2 commits# 4 Versionando
$ git log --stat
$ git log -3 --stat #últimos 3 commits# 4 Versionando
$ git log --graph --decorate --pretty=oneline --abbrev-commitDica: git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"
Cria um apelido para um outro comando
# 4 Versionando
Nota: git tree = "git log --graph --decorate --pretty=oneline --abbrev-commit"
Um branch no Git é simplesmente um ponteiro móvel leve para um commit. O nome da branch padrão no Git é a master . Conforme você começa a fazer commits, você recebe um branch master que aponta para o último commit que você fez. Toda vez que você confirma, o ponteiro do branch master avança automaticamente.
git checkout -b vava
# 4 Versionando
# 4 Versionando
Deletar uma branch
Listando Branchs
# 4 Versionando
Vamos experimentar:
# 4 Versionando
Juntar dois ou mais históricos de desenvolvimento
# 4 Versionando
Reaplicar commits em cima de outra ramificação (base)
Vamos verificar como ficou nossa árvore de commits
# 4 Versionando
O Stash é útil quando queremos tirar temporariamente arquivos do stage para utilizar posteriormente.
Remove do stage e inclui no stash
Aplica o stage na branch atual
# 4 Versionando
Criando um nome para o Stash
Aplicando um stash específico
Limpando os stash's salvos
# 4 Versionando
Sistema de Versão
Git
Configuração Git
Remoto
Versionando
Interface Gráfica
$ git remote -v
$ git remote --verbose
# 5 Remoto
# 5 Remoto
# 5 Remoto
É usado por mais de 100 000 organizações, entre elas:
IPqM (Marinha do Brasil)
Serpro (Serviço Federal de Processamento de Dados)
NASA, Alibaba, Invincea, O’Reilly Media, CERN, Projeto GNOME, SpaceX
FPF Tech
Fonte: https://pt.wikipedia.org/wiki/GitLab
# 5 Remoto
Produtos
Em Julho ouve a separação em dois produtos:
Open Core
Adoção do modelo 'Open Core'. Assim mudando a licença MIT do produto Gitlab EE para licença proprietária contendo alguns aspectos a mais que o produto Gitlab CE.
Início
O software foi escrito originalmente por Dmitriy Zaporozhets (atual CTO), da Ucrânia em 2011, era chamado GitLab sendo totalmente de graça e open source, distribuído sob a Licença MIT.
# 5 Remoto
# 5 Remoto
Vamos as opções..
Text
# 5 Remoto
Agora vai..
Nome convenção
Pode haver mais de um
Dica: A configuração do remoto pode ser vista através do git config --list
Enviar
Baixar
# 5 Remoto
# 5 Remoto
# 5 Remoto
git clone https://repositorio.git nome_da_pasta
# 5 Remoto
# 5 Remoto
# 5 Remoto
$ git fetch origin # Busca de todas as branches
$ git pull # Puxa de acordo com HEAD
$ git pull origin master # Puxa de acordo com a origem (remoto)
# 5 Remoto
# 5 Remoto
Vamos simular um conflito
Cadê a origem que estava aqui!
# 5 Remoto
# 5 Remoto
# 5 Remoto
É um protocolo de rede criptográfico para operação de serviços de rede de forma segura sobre uma rede insegura. O melhor exemplo de aplicação conhecido é para login remoto de utilizadores a sistemas de computadores.
# 5 Remoto
Com poucos passos conseguimos configurar nossa chave pública e privada (local) e associar ao remoto
chave pública
# 5 Remoto
2. Agora basta adicionar sua chave pública gerada. Prontinho pode usar o repositório remoto com SSH.
$ git remote set-url origin git@gitlab.com:Vanilton18/git-whatever.git# 5 Remoto
Sistema de Versão
Git
Configuração Git
Remoto
Versionando
Interface Gráfica
# 6 Interface Gráfica
Por meio dos clientes git podemos realizar todas as ações realizadas no terminal com ganhos de produtividade.
# 6 Interface Gráfica
2. Importar o projeto que já criamos no git
# 6 Interface Gráfica
.idea/ gerada pela IDE
2. Como é uma pasta gerada para cada usuário, vamos incluí-la no .gitignore.
# 6 Interface Gráfica
# 6 Interface Gráfica
Comitar local
Comitar e enviar para o remoto
# 6 Interface Gráfica
# 6 Interface Gráfica
# 6 Interface Gráfica
Merge = Novo Commit
# 6 Interface Gráfica
# 6 Interface Gráfica
# 6 Interface Gráfica
Nota: Shelves são salvar em .idea/shelf
# 6 Interface Gráfica
# 6 Interface Gráfica
# 6 Interface Gráfica
Reinicia a árvore sem perder o conteúdo dos commits, e incluindo os arquivos em stage
Reinicia a árvore sem perder o conteúdo dos commits, porém não incluindo os arquivos em stage
Reinicia a árvore e perde o conteúdo dos commits anteriores, mantendo apenas os arquivos do commit selecionado
# 6 Interface Gráfica
# 6 Interface Gráfica
O Git Workflow é uma receita ou recomendação de como usar o Git para realizar o trabalho de maneira consistente e produtiva. Há vários Git Workflows divulgados que podem ser uma boa opção para sua equipe.
Fixa
Descartáveis
# 6 Interface Gráfica
feature/nome_da_feature
# 6 Interface Gráfica
hotfix/nome_do_hotfix
# 6 Interface Gráfica
develop
# 6 Interface Gráfica
master
# 6 Interface Gráfica
Vamos simular a implementação de uma feature
# 6 Interface Gráfica
Vamos renomear os commits com Rebase
De baixo para cima para recriar a árvore
# 6 Interface Gráfica
Após renomear os commits vamos iniciar o rebase
Minha origem se mantem no Commit 3
Uma nova ramificação é criada para eu remanejar os commits para a árvore principal
# 6 Interface Gráfica
E por fim ajustamos a árvore
Sobrescreve o remoto com seu local "git push --force"
# 6 Interface Gráfica
Temos como realizar o rebase removendo commits
Como temos alterações no arquivo devemos fazer o merge e definir o que ficará no mesmo
# 6 Interface Gráfica
Temos como realizar o rebase removendo commits
Depois de um force Push pronto temos a arvore reestruturada sem o commit 1
# 6 Interface Gráfica
Também podemos unir commits em apenas um, o que é chamado de squash
Depois de um force Push pronto temos a arvore reestruturada com apenas o commit 2 com o conteúdo do 3
# 6 Interface Gráfica
Renomeando o commit e fazendo o push para integrar com a develop
Com o commit renomeado ficará limpo o commit inserido na develop
# 6 Interface Gráfica
Restruturar a develop para uma nova branch
# 6 Interface Gráfica
Restruturar a develop para uma nova branch
Só será gerado um novo commit com merge se houver conflito
git rebase --onto develop feature/joazin
# 6 Interface Gráfica
Agora vamos estruturar a branch feature/vanilton
Minha remoto ficou para trás, vamos restruturar fazendo o Force Push
# 6 Interface Gráfica
Agora vamos estruturar a branch vanilton
# 6 Interface Gráfica
# 6 Interface Gráfica
# 6 Interface Gráfica
# 6 Interface Gráfica
# 6 Interface Gráfica
# 6 Interface Gráfica
Configurar os estágios do pipeline no .gitlab-ci.yml
Configurar as regras de execução
vanilton18@gmail.com
Me encontre em...