quarta-feira, 20 de junho de 2012

Como utilizar o básico do git/github?

Para começar, temos que instalar o git. Para isso é só entrar na central oficial de downloads do git, escolher o seu sistema operacional e seguir as instruções.
Feita a instalação, podemos começar.


Primeiro, defina seu nome e seu email (para uso do github/git) no seu git:
git config --global user.name "Seu nome"
git config --global user.email "seu@email.com"

Faça uma cópia do repositório para o seu computador:
git clone https://youremail@github.com/yourproject/yourproject.git
Obs: prefira usar a url https ou a ssh disponível no github (a equipe do github recomenda usar o https). A url git não funciona para "pushes", ela é só para leitura.

Caso você já tenha feito a cópia usando a url git, para poder fazer commits e enviá-los para o github, use este comando (ele configura para onde enviar os "pushes" e qual protocolo usar):
git remote set-url origin https://seuemail@github.com/seuprojeto/seuprojeto.git



Feito isso é só fazer as operações normais:
git add .
git commit -am 'um commit exemplo'

E, para de fato, enviar para o servidor github, ou qualquer outro:
git push
#ou
git push origin master

E é para tudo funcionar normalmente. :)

Caso não funcione devido a um erro "public key error" ou algo parecido, a ajuda do git pode ajudar muito: http://help.github.com/linux-set-up-git/. Caso não saiba ler em inglês. Deixe uma mensagem pedindo que traduzo por você sem problemas. ;)

Cache de senha

Caso você esteja utilizando a opção de trabalhar via HTTPS, você pode configurar o seu sistema para armazenar seu login e senha temporariamente (como acontece com o sudo) para que você não precise digitá-los sempre que for enviar algo para o repositório. 
Temos que ativar o módulo credential.helper para que isso ocorra:

git config --global credential.helper cache
# ativa o cache de senhas do git

Por padrão, seus dados ficarão armazenados por 15 minutos. Você pode mudar o tempo com o seguinte comando:
git config --global credential.helper 'cache --timeout=3600'
# Define o cache para expirar depois de 1 hora (o tempo contado em segundos)


Permission denied (publickey). fatal: The remote end hung up unexpectedly

Se você executar um push e receber como resposta a mensagem do título. É porque você está se comunicando com o repositório do github utilizando ssh. Você pode mudar para https usando o comando "git remote set-url" mostrado no começo do artigo ou gerar um arquivo de chave ssh.


Passo 1:

Verificar se existem chaves ssh armazenadas no computador:
cd ~/.ssh
# Verifica se há um diretório chamado ".ssh" no diretório do usuário

Se a resposta for "No such file or directory" pule para o "Passo 3". De outro modo, continue com o "Passo 2".

Passo 2:

Faça backup das chaves ssh existentes para garantir que você não vá perder nenhuma delas:
ls
# Lista todos os arquivos e subdiretórios do diretório atual
# config  id_rsa  id_rsa.pub  known_hosts

mkdir key_backup
# Cria um subdiretório chamado "key_backup" dentro do diretório atual

cp id_rsa* key_backup
# Copia os arquivos com nome iniciado por id_rsa para o diretório key_backup

Passo 3:

Execute o código abaixo para gerar uma chave ssh nova. Vamos utilizar as configurações padrão, então quando for pedido o nome do arquivo, apenas aperte Enter
ssh-keygen -t rsa -C "seu_email@seuemail.com"
Cria uma nova chave ssh usando o email dado

Generating public/private rsa key pair.
Enter file in which to save the key (/home/you/.ssh/id_rsa):
Não digite o nome do arquivo. Só aperte enter.

Agora, digite uma passphrase (frase de segurança). A passphrase é usada para gerar a chave ssh e é armazenada codificada pelo seu cliente ssh. Funciona mais ou menos como uma senha, mas uma de alta segurança.
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
Depois de digitar, o resultado é pra ser algo assim:
Your identification has been saved in /home/you/.ssh/id_rsa.
Your public key has been saved in /home/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db seu_email@seuemail.com

Passo 4:

Agora, temos  que registrar sua chave no github. Para isso, execute este código para copiá-la para a área de tranferência ou, abra o arquivo manualmente e copie todo o conteúdo (CTRL+A e CTRL+C por exemplo).
sudo apt-get install xclip
# baixa e instala o xclip

xclip -sel clip < ~/.ssh/id_rsa.pub
# copia o conteudo do arquivo id_rsa.pub para area de transferencia

Atenção! A chave copiada tem de ser exata sem adicionar linhas ou espaços extras. Por isso a sugestão de utilizar o xclip, pois ele realiza essa tarefa facilmente.
Agora, vá para o site do github, faça login: 
  1. Vá para Account Settings
  2. Clique em "SSH Keys" no menu à esquerda
  3. Clique em "Add SSH key"
  4. Cole a chave no campo "Key"
  5. Clique "Add key"
  6. Confirme a ação digitando sua senha do GitHub

Passo 5:

Vamos testar se tudo está funcionando. Tentaremos fazer login via ssh no github. Evite usar o PuTTy, pois ele não funciona muito bem com o servidor deles e nem mude o email do comando abaixo.
ssh -T git@github.com
# tenta conectar via ssh ao github

É para aparecer este alerta:
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?

Não se preocupe, é assim mesmo. Verifique se a chave RSA mostrada coincide com a que enviamos para o github e digite "yes".

Hi seunomedeusuario! You've successfully authenticated, but GitHub does not
provide shell access.

Se o "seunomedeusuario" estiver correto, você já pode usar o git via ssh. E deixe de lado essa conexão via shell, pode-se dizer que ela é praticamente só para esse tipo de teste.
Se aparecer "access denied", mude de SSH para HTTPS. A não ser que você precise muito que seja via SSH, aí a ajuda se encontra aqui (em inglês) . 

Se você estiver procurando por alguma interface gráfica para o git (GUI) aqui tem uma lista com as principais para donwload.


Para complementar, tem esses posts que explicam bem o básico sobre sistemas de versionamento: http://legauss.blogspot.com.br/2012/05/versionamento-parte-1.html e http://legauss.blogspot.com.br/2012/05/versionamento-parte-2.html. That's all folks!


Fontes: https://help.github.com/articles/ignoring-fileshttp://stackoverflow.com/questions/7548661/git-github-cant-push-to-masterhttps://help.github.com/articles/set-up-git e https://help.github.com/articles/generating-ssh-keys.




Nenhum comentário: