>> Apresentação e considerações

Já é mais do que uma realidade o fato de que TUDO está se resumindo a código, acabou aquela história de você ficar instalando servidor na mão, fazendo todo o seu setup passo a passo e fazendo cada um de um jeito levando horas para a preparação do seu ambiente.

Provisionamento de infraestrutura, provisionamento de aplicações e até mesmo provisionamento de equipamentos de rede como routers, switches, etc, já estão sendo gerenciados via código.

Esse artigo é destinado para aqueles que estão começando ou querem começar a trabalhar com o git!

>> O que é controle de versão?

Resumidamente o controle de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas, com isso você pode ter um desenvolvimento colaborativo de forma controlada, otimizando assim a construção de qualquer projeto.

O GIT é atualmente o SCM para controle de versão mais utilizado no planeta, a melhor forma de aprender git é a própria documentação que é extremamente rica.

>> Uma Breve História do Git

Linux Torvals (criador do Linux), iniciou o projeto em 2005 após o rompimento de uma parceria com a empresa que desenvolvia comercialmente o BitKeeper que era até então uma ferramenta proprietária de apoio para a construção do Kernel do Linux, existia uma isenção da licença, porém foi revogada.

Após esse rompimento foi iniciado o desenvolvimento com git tendo em vista alguns objetivos que eram:

  • Velocidade
  • Design simples
  • Suporte robusto a desenvolvimento não linear (milhares de branches paralelos)
  • Totalmente distribuído
  • Capaz de lidar eficientemente com grandes projetos como o kernel do Linux (velocidade e volume de dados)
  • >>Vamos a prática

    Instalando o GIT

    Like RHEL

    yum install git-core

    Like Debian

    apt-get install git

    Para as demais distribuições, segue o link:

    https://git-scm.com/book/pt-br/v1/Primeiros-passos-Instalando-Git

    Logue-se no shell e vamos começar!

    mkdir churrops-artigo-git
    cd churrops-artigo-git

    Vamos inicializar o nosso repositório local, você pode notar que criará um diretório .git, nesse diretório estão contidos todos arquivos de controle do nosso repositório, se removê-lo, perde-se a referência com o seu repo.

    git init
    
    Initialized empty Git repository in /Users/rodrigo/Project/churrops-artigo-git/.git/

    O arquivo HEAD é uma referência simbólica para o ramo em que você está no momento. Ele possui um ponteiro que referencia a branch que você está trabalhando. Se você observar o arquivo, normalmente verá algo assim:

    cat .git/HEAD
    ref: refs/heads/master

    Configuração inicial do git

    Como a idéia do git é ser um repositório colaborativo, é básico e necessário que o usuário se identifique, vamos aqui setar respectivamente o e-mail e nome do usuário + o editor de texto padrão utilizado pelo git.

    git config --global user.email "florianocomercial@gmail.com"
    git config --global user.name "Rodrigo Floriano de Souza"
    git config --global core.editor "vim"
    

    Começando a trabalhar no repositório

    Vamos criar 2 arquivos:

    echo "meu primeiro arquivo" >> FirstFile.txt
    echo "meu segundo arquivo" >> SecondFile.txt

    A saída do git status mostra que temos 2 arquivos como Untracked, ou seja, o git ainda não está rastreando esses arquivos, eles estão no Working Directory.

    Captura de Tela 2018-04-09 às 23.47.51

    Vamos trackear esses arquivos para que o git comece a rastreá-los, nesse momento os arquivos vão para a Staging Area, e depois vamos fazer um commit para que de fato os arquivos estejam de fato no repositório local.

    git add -A
    
    git commit -m "meu primeiro commit"

    Obs.: É importante utilizar o parâmetro -m para adicionar sempre um comentário a cada commit informando o que foi adicionado/removido/atualizado.

    Captura de Tela 2018-04-09 às 23.58.25

    Abaixo temos uma figura retirada da documentação oficial que ilustra o caminho por onde os arquivos passaram até chegarmos aqui.

    Captura de Tela 2018-04-09 às 23.54.14

    Preparando o repositório remoto

    Setup do github

    O Github é o maior repositório público do planeta (até onde eu sei) nele estão a maioria esmagadora de projetos OpenSource de pessoas e empresas do mundo todo, com isso, é ele que vamos usar para a nossa brincadeira, se você não tem uma conta siga os passos:

    Abra o site do GitHub, e preencha as informações solicitadas: https://github.com/, caso voce já tenha conta basta se logar.

    cadastro-github

    Criando o primeiro repositório remoto e preparando os acessos com chaves ssh

    Até o momento TUDO o que foi feito está local em nossa máquina, e agora queremos subir para um repositório remoto, podemos criar o repositório remoto pelo browser, mais aqui vamos utilizar via CLI (Command Line Interface). Execute o comando abaixo substituindo o valor do parâmetro -u pelo seu usuário criado no github.

    curl -u '[seu-login-do-github]' https://api.github.com/user/repos -d '{"name":"churrops-artigo-git"}'

    A saída do comando será grande, o que você precisa é pegar o valor ssh_url gerado de:

    "ssh_url": "git@github.com:rdglinux/churrops-artigo-git.git"

    Criando as credenciais SSH para acesso ao repositório

    Via linha de comando, vamos criar a sshkey
    (Caso você já possua chaves ssh pode ignorar a criação)

    ssh-keygen -t rsa -f ~/.ssh/churrops-artigo-git -C "seu_email@seu_dominio.com" -q -N ""

    Com os comandos abaixo estamos adicionando a chave na sessão do usuário, com isso, não será necessário indicar a chave no comando sempre que for fazer um push.

    eval $(ssh-agent -s) && ssh-add ~/.ssh/churrops-artigo-git

    Visualizando a chave adicionada na sessão com sucesso!

    ssh-add -l
    
    2048 SHA256:Pfqja+xoTJdGZu3PHfQi60h4cJqePZJ65OR9omE434k /Users/rodrigo/.ssh/churrops-artigo-git (RSA)

    Vamos fazer a adição da chave criada via CLI para o GitHub.

    curl -u "[seu-login-do-github]" --data '{"title":"seu_email@seu_dominio.com","key":"'"$(cat ~/.ssh/churrops-artigo-git.pub)"'"}' https://api.github.com/user/keys

    Captura de Tela 2018-04-10 às 00.23.39

    Validando o acesso via SSH com a chave carregada na sessão via ssh.

    ssh -T git@github.com

    Captura de Tela 2018-04-10 às 00.46.04

    Adicionando o repositório remoto

    Com a URL que pegamos da saída ssh_url vamos adicionar o repositório remoto.

    git remote add origin git@github.com:rdglinux/churrops-artigo-git.git
    git remote -v
    
    origin	git@github.com:rdglinux/churrops-artigo-git.git (fetch)
    origin	git@github.com:rdglinux/churrops-artigo-git.git (push)

    Enviando os arquivos para o repo remoto (push)

    Com o repositório adicionado, vamos fazer o nosso primeiro push, ao realizar o push nesse exemplo vamos fazê-lo para a branch master.

    git push origin master

    Segue como deverá ser a saída, está assim? SUCESSO TOTAL!

    Captura de Tela 2018-04-10 às 00.55.47

    Ao acessar o github, podemos ver que o sync ocorreu com sucesso, tudo o que estava em nosso repositório local foi para o github que é o nosso repositório remoto.

    https://github.com/rdglinux/churrops-artigo-git

    Captura de Tela 2018-04-10 às 01.00.07

    >> Conclusão

    Bom, tentei deixar o artigo simples, objetivo e não muito extenso, nos próximos pretendo dar continuidade explorando outros comandos e features do git.

    >> Dicas e referências

    Novamente reforçando a documentação oficial do git é uma excelente fonte de estudo.

    Se você que deseja conhecer mais sobre as ferramentas que fazem parte da Cultura DevOps + SoftSkills, segue a dica de um treinamento PHODA do Jeferson Fernanda e do Mateus Prado, que inclusive tem git como um de seus módulos.

    https://www.codeops.com.br/treinamentos/hpd/

    Também segue o Blog do meu brother Evandro Couto que tem bastante coisa legal sobre git também, além de muitas outras coisas!

    http://tutoriaisgnulinux.com/category/git/

    Obrigado!