Tem dificuldade em saber quem alterou o que e quando?
Tem dificuldade em recuperar uma versão do documento?
Tem problemas em manter variações do sistema ao mesmo tempo?
Se respondeu sim pra qualquer uma das perguntas anteriores, você precisa urgentemente de um sistema de controle de versão
Controle de versão
Um sistema de controle de versão é um software com a finalidade de gerenciar diferentes versões no desenvolvimento de um documento qualquer...
Boring definition...
Controle de versão - Vantagens
Controle de histórico
Trabalho em equipe
Marcação e resgate de versões estáveis
Variações do projeto
Backup do projeto
Controle de versão local
Controle de versão centralizado
Controle de versão distribuído
Exemplos Open Source
Controle de versão centralizado
CVS
SVN
Controle de versão distribuído
Git
Mercurial
Senta que lá vem história...
Durante a maior parte do período de manutenção do kernel do Linux (1991-2002), as mudanças no software eram repassadas como patches e arquivos compactados.
A equipe do Linux usava um Gambi Design Pattern, Zippomatic Versioning
Tá pensando que o Torvalds é bagunça?
Em 2002, o projeto do kernel do Linux começou a usar um sistema DVCS proprietário chamado BitKeeper.
Torvalds fica full pistola!
Em 2005, o relacionamento entre a comunidade que desenvolvia o kernel e a empresa que desenvolvia o BitKeeper se desfez. Isso levou a comunidade de desenvolvedores do Linux (em particular Linus Torvalds) a desenvolver sua própria ferramenta.
$ git status
On branch master
Initial commit
nothing to commit (create/copy files and
use "git add" to track)
Adicionando novos arquivos
$ git add README.md
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
Alterando arquivos adicionados
Criar e adicionar arquivo index.html
Alterar arquivo index.html
Alterar o arquivo README.md
$ git add *
Atenção
Quando o git add é executado, o git seleciona o arquivo do jeito que ele está.
Se esse arquivo for alterado após o git add, é necessário executar o git add novamente.
Quase todas as ações do Git adicionam dados no repositório
Antes do commit, você pode bagunçar mudanças
Git só adiciona dados
Após o commit, tudo é registrado e é muito difícil perder algo
Isso permite que possamos fazer experiências sem medo
Snapshots x diferenças
Snapshots x diferenças
Visualizando o histórico de commits
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the verison number
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test code
...
Parâmetros do git log
Opção
Descrição
-p
Mostra o patch introduzido com cada commit.
--stat
Mostra estatísticas de arquivos modificados em cada commit.
Parâmetros do git log
Opção
Descrição
--shortstat
Mostra somente as linhas modificadas/inseridas/excluídas do comando --stat.
--name-only
Mostra a lista de arquivos modificados depois das informações do commit.
Parâmetros do git log
Opção
Descrição
--name-status
Mostra a lista de arquivos afetados com informações sobre adição/modificação/exclusão dos mesmos.
Verificando o Log no GitKraken
Verificando as mudanças
$ git diff
diff --git a/index.html b/index.html
index 2c78d33..544c542 100644
--- a/index.html
+++ b/index.html
@@ -16,11 +16,11 @@
</head>
<body>
-
+ <h1>Olha o titulo adicionado!
+ <h2>Outro só pra variar</h2>
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
- <!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
-
- <script src="https://ajax.googleapis.com/ajax/libs/angularjs//angular.js"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/angularjs//angular.js"></script>
</body>
</html>
warning: LF will be replaced by CRLF in index.html.
The file will have its original line endings in your working directory.
Verificando as mudanças
Verificando mudanças do arquivo index.html, da versão atual para última
Você adicionou arquivos (git add) e quer remover algum deles?
$ git add .
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.txt
# modified: benchmarks.rb
Git reset neles!
$ git reset HEAD benchmarks.rb
benchmarks.rb: locally modified
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.txt
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: benchmarks.rb
#
Tirando arquivos da área de seleção
Desfazendo um Arquivo Modificado
Alterou um arquivo e quer desfazer a alteração?
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: benchmarks.rb
#
Use checkout!
$ git checkout -- benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.txt
#
Desfazendo um Arquivo Modificado
Resumo
* Verificar histórico: git log
* Verificar diferenças: git diff
* Ignorando arquivos: arquivo .ignore
* Adicionar servidor remoto: git remote add
* Remover arquivos: git rm
* Mover arquivos: git mov
Tomo 7
Trabalhando em equipe com o Git
Atenção Vingadores da Justiça
Desafio Amalgamerda!
Houve uma colisão de universos e precisamos catalogar os novos heróis.
Vocês jovens heróis, devem identificar quem são e de onde vieram os novos heróis .
Desafio Amálgama - Regras
Cada equipe deve ter um repositório
Máximo de 4 membros por equipe
Cada novo herói é o amalgama de outros dois existentes
Amálgamas fictícios (como os da saga Amálgama da Marvel e DC) não serão usados!
Desafio Amálgama - Regras
Cada novo herói tem uma pasta com seu dossiê
Cada dossiê deve ter duas fotos, dos heróis antigos e um texto descrevendo o novo herói, sua história e seus poderes
Cada dossiê deve ter ao menos dois editores, para garantir a precisão
PONEYSHER!
Esse ponei justiceiro teve sua família morta por um jumento mafioso e resolveu combater o crime!
Tomo 8
Encontrando Ajuda
Usando a ajuda do git
$ git help <verb>
$ git <verb> --help
$ man git-<verb>