Bitbucket: configuração e branches

O Bitbucket é um serviço de hospedagem de projetos controlados através do Mercurial, um sistema de controle de versões distribuído. Possui também serviço gratuito, o que permite você criar uma conta para testar o serviço. Por ser baseado em versionamento Git e similar ao GitHub, vale a pena a leitura do post sobre o programa no link. A Atlassian (empresa responsável pelo Bitbucket) tem um cheat sheet com os principais comandos do Git, disponível no link.

O primeiro passo para iniciar um repositório é permitir acesso do seu computador para o servidor do Bitbucket. Em seu computador, você deve copiar a chave pública. Ela é o conteúdo do arquivo “~/.ssh/id_rsa.pub” – caso não tenha a chave, execute o comando “ssh-keygen -t rsa” para criá-la. Então acesse o site, faça login e clique em seu ícone de usuário (canto inferior esquerdo) para escolher a opção “Bitbucket settings”. Então clique em “Security | SSH keys” e em adicionar. Dê um nome (pode ser o nome da sua máquina) e cole a chave pública (copiada previamente para sua área de transferência) no quadro abaixo. Para testar, execute em seu PC “ssh -T [email protected]”.

Depois, você deve criar um repositório no servidor remoto, que é onde os códigos serão alocados. Faça o login para entrar na tela inicial. Crie um projeto, se for o caso. Clique no “+” no menu à esquerda, escolha “owner” (você mesmo), “project”, coloque o nome do repositório (escolha o mesmo nome da pasta de trabalho no seu computador) e não crie arquivo descritivo (deixe para criá-lo no seu próprio computador e subir tudo depois).

No terminal do seu computador, vá para o diretório cujos códigos devem ser enviados ao Bitbucket.

Antes de subir os arquivos, é costume criar um arquivo que indique quais arquivos e/ou diretórios devem ser ignorados ao versionar seus códigos, em qualquer lugar abaixo do nível atual em uma árvore de diretórios. Para criá-lo, entre no diretório de trabalho e execute o comando “touch .gitignore”. Abra-o para edição e inclua os nomes dos diretórios que você não quer que sejam “gitados”. Se for um diretório (em qualquer lugar), adicione ‘/’ no final da linha; se for um subdiretório, inclua ‘*/’ no início; um ‘*’ considera todos os arquivos com o padrão que vier depois. Por exemplo, é costume remover o diretório “__pycache__” e os arquivos compilados “.pyc”, deixando o arquivo “.gitignore” assim:

*/__pycache__/
*/*.pyc

Para iniciar o git e adicionar todos os arquivos novos, digite os seguintes comandos:

git init
git add -A

Para definir a identidade padrão da sua conta, execute (omita –global para definir a identidade apenas neste repositório):

git config --global user.email "[email protected]"
git config --global user.name "Seu Nome Para Aparecer Nos Logs"

Por fim, para conectar seu repositório existente ao Bitbucket, “comitar” os arquivos e fazer o envio:

git remote add origin [email protected]:nome_do_projeto/nome_do_repositorio.git
git commit -am "first commit"
git push --set-upstream origin master

Se você já tem alguma pasta no seu índice git que você não deseja mais acompanhar, então você precisa removê-las explicitamente. O Git não irá parar de rastrear caminhos que já estão sendo rastreados apenas porque eles agora correspondem a um novo padrão .gitignore. Para isso, execute os seguintes comandos:

git rm -r --cached NOME_DA_PASTA
git commit -am "remove directory NOME_DA_PASTA"
git add -A # por garantia
git push

Com tudo pronto, das próximas vezes que editar seu código, você pode executar somente esses comandos:

git commit -am "DESCRIÇÃO DO QUE FOI FEITO"
git push

Para criar um README, use esse editor de markdown online e depois copie o texto para um arquivo local com o nome README.md. Algumas dicas para edição:

  • Sempre usar uma linha em branco para separar blocos de texto (entre título e texto)
  • Títulos começam com ‘#’ – quanto mais hashtags, mais subníveis
  • Listas usam ‘-‘ ou ‘*’, mas sempre aparecem como uma “bolinha”
  • Para forçar uma quebra de linha após o parágrafo, colocar dois espaços no final da linha
  • Linha horizontal (para separar grandes tópicos, por exemplo): – – – (espaço e traço três vezes)

Criar uma “branch”

Para trabalhar com uma nova ramificação (“new branch”), você pode primeiro criá-la na interface do GitHub/Bitbucket (no painel do repositório, clique em “Branches” no menu esquerdo e no botão “Create branch”). Ele pode ser do tipo Bugfix (usado para corrigir ramificações de releases), Feature (para trabalho de recurso específico ou melhorias), Hotfix (corrigir rapidamente um ramo de produção sem interromper as alterações no ramo de desenvolvimento/master) ou Release (versões de manutenção de longo prazo). Assim, “feature/exemplo” pode ser o nome de um novo ramo para desenvolver um novo recurso.

Exemplo de workflow com branches. Fonte: Atlassian
Exemplo de workflow com branches. Fonte: Atlassian

Você também pode criar o ramo localmente, para depois subir ao servidor. Veja esse exemplo, onde o nome do novo ramo é “NOME_DO_RAMO”:

git checkout -b NOME_DO_RAMO # Cria (-b) e entra na branch

Estando na branch, os procedimentos de adicionar e “commitar” são os mesmos, mas para subir as modificações, o comando deve conter o nome do ramo, por exemplo:

git commit -am "teste no NOME_DO_RAMO"
git push --set-upstream [email protected]:nome_do_usuario/nome_do_repositorio.git NOME_DO_RAMO

Para voltar ao branch master, basta realizar o comando “git checkout master”.

Para fazer merge de uma outra branch à master, primeiro certifique-se que a branch está com todas as alterações “comitadas” e “enviadas”, então siga os passos:

# Ir para a master
git checkout master
# Dar merge
git merge NOME_DO_RAMO
# Ver relatório de alterações e "comitar"
git commit -am "merged master NOME_DO_RAMO"
# Enviar alterações para servidor
git push --set-upstream [email protected]:nome_do_usuario/nome_do_repositorio.git master

Abrindo o site, as alterações que só estavam na branch agora estão na branch master também.

Para ver uma árvore de branchs e últimos commits:

git show-branch

Se quiser remover algum branch, use:

git branch -D NOME_DO_RAMO

Se não tiver subido a branch para o servidor de códigos, isso é suficiente; caso contrário, acesse a interface e remova manualmente. Todas as alterações realizadas nessa branch serão perdidas, restando os códigos na última versão da branch master.