quinta-feira, 8 de dezembro de 2016

Comandos para o Git e como funciona

Este é o primeiro de dois posts sobre o uso de Git e Github baseando nas aprendizagens do curso da Udacity, How to Use Git and GitHub. Neste post há informações sobre git, que é um sistema de controle de versão.

Abaixo são anotações de comandos e pontos relevantes do curso.

Comparando arquivos em linha de comando nos diferentes sistemas operacionais:

Windows = FC [arquivo1] [arquivo2]
Que significa File Compare
Apple e Linux = Diff -u [arquivo1] [arquivo2]
Que significa Difference

Instalando o Git

Documentação de instalação da Udacity: Git installation instructions
Ou na página do Git: Getting Started - Installing Git

Para fazer o copiar e colar do GitBash fácil no Windows Copying and Pasting in Git Bash

Definindo um atalho para editor de texto na linha de comando

Se você instalou o Git Bash para o windows e deseja definir um editor de texto para chamar pela linha de comando, siga os passos abaixo:

Definindo para o Sublime o alias subl
  1. Abra o Git Bash
  2. Execute o comando de alias:
    1. echo 'alias subl="C:/Program\ Files/Sublime\ Text\ 2/sublime_text.exe"' >> ~/.bashrc
    2. Importante colocar a "\" em cada espaço existente
    3. Importante verificar se o seu sublime está instalado no mesmo diretório, do contrário, alterar
  3. Feche e reabra o Git Bash

Definindo para o Visual Studio Code o alias vscode 
(Confira se já não há um atalho criado para code no seu ambiente, se já existir, este passo a passo pode ser ignorado)
  1. Abra o Git Bash
  2. Execute o comando de alias :
    1. echo 'alias vscode="C:/Program\ Files\ \(x86\)/Microsoft\ VS\ Code/Code.exe"' >> ~/.bashrc
    2. Importante colocar a "\" em cada espaço existente
    3. Importante verificar se o seu sublime está instalado no mesmo diretório, do contrário, alterar
  3. Feche e reabra o Git Bash

Com que frequência fazer um commit?

Cada commit no Git,ou no TFS, podem juntar vários arquivos e é importante você pensar na organização do mesmo. O curso dá uma boa sugestão:
"Uma boa regra prática é fazer um commit por alteração lógica. Por exemplo, se você corrigiu um erro de digitação, depois corrigiu um bug em uma parte separada do arquivo, deve usar um commit para cada alteração, pois eles estão logicamente separados. Se você fizer isso, cada commit terá um propósito que poderá ser facilmente entendido. O Git permite a você escrever uma mensagem curta explicando o que mudou em cada commit, e essa mensagem será mais útil se cada commit tiver uma única alteração lógica."
Udacity - Navegação de Histórico de um Commit - Um commit por alteração lógica

Comandos
Para ver todas as informações do repositório
git log --stat

Para ver diferenças entre dois commits
git diff [id1] [id2]

Para ver a diferença de um commit em relação ao seu pai(ou anterior)
git show [id]

Para adicionar um arquivo ao stage area :

git add [arquivo ou diretório]

Para remover um arquivo ou diretório ao stage area (é possível utilizar -r para ser recursivo) :

git rm [arquivo ou diretório]

Para renomear um arquivo ou diretório:
git mv [nome antigo] [nome novo]


Para adicionar todos os arquivos locais ao repositório:
git add -p

Mais informações sobre o git add.

Clonando um repositório

Clonar um repositório é fazer um cópia local para possibilitar suas alterações controlando o histórico. Para clonar um repositório basta executar o comando abaixo:
git clone [urlRepositorio]

Para descobrir uma url de um repositório no GitHub é possível através do botão Clone or Download:

Restaurando estado anterior

Para restaurar os arquivos para um estado anterior use o comando:
git checkout [id]

Importante entender que este checkout é diferente do checkout do SVN, Source Safe e TFS

Para desfazer alterações pendentes e voltar ao ultimo commit (CUIDADO todas altearcoes serao perdidas):
git reset --hard

git-reset Documentation

Branches

Para saber os branches disponíveis:
git branch -a
o parâmetro "-a" mostra inclusive branches remotas

Para criar um branch:
git branch [nome]

Para trabalhar em uma branch em especifica:
git checkout [nome branch]

Para comparar o historico de arquivo de dois branches:
git log --graph --oneline [branch1]  [branch2]



Para criar em uma branch e fazer o seu checkout:
git checkout -b [branch]

Para excluir uma branch:
git branch -d [branch]



Merge

Comando para fazer o merge de dois branches:
git merge [branch Origem] [branch Destino]



Mapa conceitual do Git e Gibhub, criado pelo curso da Udacity: