git
, github
e gitlab
git
?Muito usado em desenvolvimento de software
Criador: Linus Torvalds (criador do Linux)
Permite que várias pessoas editem localmente suas coisas e depois compartilhe suas alterações
git
repo
)O seu projeto (ou uma cópia dele). Pode ser local e/ou remoto
É onde você está trabalhando… Pode ou não estar modificado
É o "estado atual estável" do seu projeto
Ao terminar de manipular os arquivos, você deve realizar o commit (ou commitar) para realizar a gravação das alterações dos seus arquivos para a stage area. Será pela stage area que você irá pegar suas alterações e as sincronizar com ambientes remotos
De maneira geral, um remoto é um repositório que contem os mesmos conteúdos do seu repositório em outro local. Um remoto pode estar hospedado em um servidor público ou privado e pode ser acessado por várias pessoas. Após um commit, o git
permite que vários repositórios remotos possam ser adicionados
Sincronizar seu repositório enviando para (push - empurrar) ou trazendo do (pull - puxar) remoto as informações de/para um repositório remoto.
Em um ambiente em que vários usuários estão utilizando o mesmo repositório remoto, pode acontecer de várias pessoas trabalharem em arquivos localmente e modificar trechos nos mesmos arquivos. Quando isso ocorre, pode acontecer conflitos quando trechos similares são alterados. O git
pode tentar resolver os conflitos, mas pode acontecer de necessitar intervenção humana.
Caso ocorra conflitos, antes de poder realizar o commit, deve-se resolver os conflitos e realizar o merge para indicar que esse conflito deve ser considerado resolvido por outros repositórios. De outro modo, nenhum commit será aceito.
Toda vez que um commit for realizado, o 'git' exige que seja publicado uma nota sobre o que foi alterado como registro. Esse log também é incluído como parte do commit, com data e informação de quem realizou tais alterações, além de uma hash relacionada ao commit que permite realizar o reset
De difference (diferença). Permite rastrear as alterações realizadas, como forma de corrigir falhas ou realizar o rollback (retroceder) a versões anteriores
Quando você volta atrás a uma versão anterior de um arquivo ou de um repositório. Potencialmente destrutivo!
Um branch permite criar uma "versão estável" do repositório. Pode ser usado tanto para manter uma "versão antiga congelada" do repositório quanto um local onde você pode trabalhar tranquilamente sem correr risco de estragar seu projeto principal (master).
Para alternar entre branch, você deve realizar o checkout, que vai tornar o seu diretório de trabalho com os conteúdos do branch em questão.
É possível dar merge de conteúdo de um branch para outro à vontade
É o branch principal do repositório e é criado automaticamente, seja pela inicialização quanto pela clonagem
Criar um ambiente inicial, criando o Stage Area
Realizar a cópia de um repositório remoto de um servidor para seu computador. Ele já prepara também a estrutura para sincronizar o repositório remoto com as alterações locais.
git
Versões para todas as plataformas principais (Windows, Linux, Mac…)
É incluído em todas as principais distribuições
apt install git
yum install git
pacman -S git
emerge git
Existem clientes para celular também
Importante para facilitar o gerenciamento do repositório
git --global user.name
- Nome que irá aparecer em seus commitsgit --global user.email
- Seu emailVocê pode modificar esses parâmetros dentro de outros repositórios
Você pode inicializar um repositório zerado ou clonar um remoto com conteúdo já existente
git init
Você pode transformar qualquer diretório do seu computador em um repositório git
. Esse comando não é destrutivo e vai criar todos os arquivos necessários para seu stage area em um diretório especial dentro chamado .git
git clone <URL>
Esse comando irá copiar todo o conteúdo do repositório remoto, mais toda a estrutura necessária para o stage area em um diretório abaixo de onde você está, com o nome igual a URL. Você pode renomear ele normalmente.
.git
.gitigonore
git add
Usando esse comando, você irá adicionar os arquivos ao stage area. Esses arquivos passam a ser "monitorados" pelo git
(qualquer alteração será alertada no momento de um commit). Arquivos que não sejam monitorados (untracked) podem provocar alertas.
git add -A
adiciona todos os arquivos (diretórios inclusos) dentro do diretório do projeto ao stage area
git commit
Esse comando registra todas as alterações dos arquivos monitorado no git
. Ao realizar o commit, um editor será aberto para que você registre as motivações da alteração (para fim de auditoria).
git commit -am '<motivo>'
evita a abertura do editor, registrando a alteração com o motivo marcado]
git checkout <branch>
Esse comando permite alterar entre branches dentro de um repositório git
git checkout -b <novo_branch>
cria um novo branch e alterna automaticamente para o mesmo
Logs são úteis para verificar quem fez o que, quando e porquê
Diffs permitem analisar o que foi modificado entre você e a última atualização do stage
Resets permitem devolver o seu ambiente à última versão
git log
Normalmente é bem verboso (completo). Algumas opções podem tornar a saída one-liner
git diff
Mostra as alterações entre o que você fez e o que está no stage
git reset
Devolve o ambiente ao último commit realizado
Às vezes, queremos fazer alterações que não interfiram no que já fizemos…
…ou queremos salvar um "ponto de retorno" para caso realize muita besteira.
Branches são a a solução
"Galhos" que servem como ponto de modificação segura.
git branch add <branch>
Cria um branch novo
git checkout
Reconfigura seu ambiente para representar aquele branch
Usando a opção -b
cria automaticamente um novo branch
Master: Branch especial
git merge <origem> <destino>
Permite que você traga todas as alterações de um branch em outro
Git possui uma certa capacidade de resolução de conflitos
Caso não seja possível, procedimento é:
Em caso de dúvidas: reset
Desenvolvimento distribuido: problema sério em sistemas de controle de versão antigo
Usuário A mexia no código em a.prog
…
… onde Usuário B também estava mexendo.
Soluções variadas:
Faz todas as modificações localmente
Puxa (pull
) novas atualizações de um repositório remoto confiável
Empurra (push
) alterações
O Código pode ser auditado, verificado e assinado para garantir que um usuário qualquer não modifique partes importantes do projeto
Pode-se configurar o git
para puxar/empurrar alterações de múltiplos repositórios remotos
Minha máquina, um remoto no github, um remoto do Linux.org, …
git remote
Comando base para tudo que lida com remotos
Github.com
Serviço colaborativo de versionamento de código
Funciona como um frontend para uma série de funções do github
Extremamente popular
Adquirido pela Microsoft em 2018
gitlab.com
Serviço similar ao github, com maior número de funcionalidades
Código disponível no próprio gitlab como repositório remoto
Possui versões pagas e que podem ser produzidas em sua corporação
git remote add <nome> <url>
"Conecta" seu repositório local ao repositório remoto
git push <nome> <branch>
Empurra para o repositório remoto nome
todas as modificações no branch
Se utilizar o comando sem um branch, o comportamento vai ser errático…
git clone <url>
Clona um repositório remoto em um diretório igual ao nome do repositório remoto.
Se colocar -o <nome_remoto>
após git clone
, coloca outro nome para o remoto ao invés de origin
git pull <remoto>
Atualiza seu stage e seu diretório de trabalho com as novas modificações no repositório remoto
Não pode ser feito com o stage "sujo" (com modificações não comitadas)
Irá informar em caso de conflitos que não possam ser resolvidos
Qualquer documento texto pode ser gerenciado
Outros formatos também, mas fica mais complexo e perde funcionalidades
Compartilhamento de informações com rastreabilidade
Fichas de personagem, Registros de Campanha, Controle de Mesa, etc…
Somado com Markdown se torna muito poderoso
https://github.com/amazingrando/fate-srd-content
SRD do Fate em Formatação Markdown
https://github.com/openadventure/Open-Adventure
Jogo Old School totalmente aberto
https://github.com/brunobord/the-black-hack
Repositório com várias traduções do jogo Black Hack
https://github.com/capheind/ACKS_SRD
SRD do sistema Old School Adventurer Conqueror King
Apenas o Começo…
… Milhões de tutoriais na Internet
Uma boa opção (em inglês)