Git

De Pontão Nós Digitais

For a brief list of commands, see Comandos Git.

To learn Git, see Literatura recomendada pela equipe#Git.

Palestra do Linus Torvalds no Google sobre o Git http://git-scm.com

Git Service Providers

We recommend the following equally good services:

  • github.com -- easier, simpler, yet powerful service focused on your git repository and not much else
  • sourceforge.net -- complete infrastructure for your project: git, web space, mailing lists, etc. a bit more complicated than github. we use mostly sourceforge here but have recently been using Github more and more.

Git vs other distributed version control systems

Git vs. Mercurial

Mercurial is a popular version control system written in Python. It started nearly at the same time as Git by kernel hackers for the same purpose - to replace the proprietary Bitkeeper. In the end, the kernel developers decided for Git. Mercurial is written in Python and is used by Python itself, Mozilla Firefox, etc. Most likely, Git's biggest advantage here is efficiency/speed.

Git vs. Bazaar

Bazaar is the official version control system from Canonical and it's a GNU project. It is used by inkscape, emacs, etc. It is written in Python.

The case is summarized on a phrase from the Bazaar/Canonical website, "Git is undoubtedly powerful but, in our view, it’s far more complex than a version control tool needs to be for most people."

We somewhat disagree, since Git can be used at various levels of complexity.

Create Repos on Sourceforge

New Way

Go to the sourceforge website for your project, then click Admin -> Tools -> Git (under "click to install"). Type the name of your project (we call it NOME_REPOS). For the curious, this will create a bare repository at /home/git/p/labmacambira/NOME_REPOS

Once the repository is created, you can access instructions on how to populate it by accessing

https://sourceforge.net/p/labmacambira/NOME_REPOS

Old Way

Acesse a conta do projeto por ssh:

   ssh -t USER,PROJECT@shell.sourceforge.net create

Vá ao diretório do projeto:

   cd /home/scm_git/l/la/labmacambira

Crie o diretório com o nome do repositório desejado:

   mkdir NOME_REPOS

Crie o repositório (bare):

   git --git-dir=NOME_REPOS init --shared=all --bare

Using the newly created repository

Pronto, agora você poderá usá-lo:

Clone-o:

   git clone ssh://USERNAME@git.code.sf.net/p/labmacambira/NOME_REPOS

Depois do git add e commit usuais, o primeiro push devera ser dado explicitamente com:

    git push origin master

Mais informações em http://sourceforge.net/apps/trac/sourceforge/wiki/Git

Se já tiver um repos git e quer migrá-lo para SF como origin

Além das instruções acima, adentre o repositório git local ('cd NOME_REPOS') e mande

   git remote rm origin # caso o repo local tenha sido clonado de outro, caso contrário pule isso
   git remote add origin ssh://USERNAME@git.code.sf.net/p/labmacambira/NOME_REPOS
   git config branch.master.remote origin
   git config branch.master.merge refs/heads/master
   git push origin master

Iniciando um Repo Git a partir de um projeto já existente

Basta entrar no diretório raiz do projeto e iniciar o repo:

   $ git init

Depois de limpar os arquivos temporários e auxiliares, adicione todo mundo:

   $ git add .

Este comando acima já adiciona toda a árvore.

Dá um 'git status' para ver se não tem algum arquivo lixo. Se tiver, manda um:

   $ git unstage <arquivo>

Para cada arquivo. Pronto! Pode commitar!

Interface Git para Subversion e CVS

Para usar Git como interface para o Subversion


Para usar Git como interface para o CVS

Mirrors destes links em [1] e [2]

Gerando patches pra comitadas

Muitos projetos nao dao acesso a commitadas diretamente, exigindo submissao de patches. Veja como fazer isso com git format-patch [3]:

Cria-se um branch a partir do master, com suas mudancas. Depois cria-se um patch desse branch referente ao master, executando o seguinte comando a partir desse novo branch:

git format-patch master --stdout > fix_bug_69.patch

Tambem e' util saber dar um squash nos seus commits pro patch ficar mais limpo depois de varias edicoes, ver [4].

Migrar de SVN para GIT

Criamos um repos temporário para baixar o SVN:

   mkdir repos_tmp
   cd repos_tmp
   git svn init URL_DO_SEU_REPOSITORIO_SVN --no-metadata
   git svn fetch

Agora vamos limpar a sujeira deixada pelo SVN, clonando o repos temporário no repos final:

   cd ..
   git clone repos_tmp repos_final
   cd repos_final

E configuramos para usar o SF:

   git remote rm origin
   git remote add origin ssh://USERNAME@git.code.sf.net/p/labmacambira/NOME_REPOS
   git config branch.master.remote origin
   git config branch.master.merge refs/heads/master
   git push origin master

Migrar de CVS para Git

Exitem diversas maneiras de se converter um repositorio existente para Git. Se o repositorio principal nao sera convertido para Git, ou se o repo principal e' simples, pode-se usar o git cvs. Nesse caso, veja o link: https://sourceforge.net/apps/trac/vxl/wiki/GitCvs

Ver tambem o seguinte link, para o caso de se usar Git com Subversion: https://sourceforge.net/apps/trac/vxl/wiki/GitSvn

Agora, para migrar o repositorio CVS para Git de uma vez por todas, vou descrever um jeito que usei para converter o SIP, o qual tinha um repositorio CVS no sourceforge. Primeiramente, usei o seguinte comando de backup do sourceforge pra baixar o repo CVS:

 rsync -av rsync://siptoolbox.cvs.sourceforge.net/cvsroot/siptoolbox/* .


Segui as instrucoes em Creating Multiple Repositories da pagina https://sourceforge.net/apps/trac/sourceforge/wiki/Git

  • Tenho 4 repositorios dentro do projeto siptoolbox: animal,simpletoolbox,www e siptoolbox
  • Dentro do shell do sourceforge:
mkdir animal simpletoolbox www
git --git-dir=www init --shared=all --bare

este ultimo comando sendo repetido para animal e simpletoolbox.

Em seguida, dei um clone em cada um, depois, para cada modulo (p.ex. www abaixo), editei cvs2git.options colocando o caminho apropriado na string logo apos run_options.set_project

cvs2git --options=../cvs2git.options
cd www
cat ../cvs2svn-tmp/git-{blob,dump}.dat | git fast-import
git reset --hard
git push origin master
rm -rf ../cvs2svn-tmp

Eh isso ae, mais ou menos..


Referencias de migracao CVS para Git


Integrando repositório Git com CIA.vc

Se você tiver um repositório no Git do labmacambira

Você precisará de uma conta no SourceForge (SF), se não tiver, crie uma em http://sourceforge.net.

Conecte por shell no SF, usando seu usuário, no projeto labmacambira:

   ssh -t SEU_USUARIO,labmacambira@shell.sourceforge.net creat

Quando logar, entre os comandos (digamos que seu repositório se chame FOOBAR):

   cd /home/scm_git/l/la/labmacambira
   cp aa/hooks/update FOOBAR/hooks/
   cp aa/hooks/ciabot.pl path_para_seu_repos/hooks/

Edite o arquivo FOOBAR/hooks/ciabot.pl, na linha 53, e muda para o nome do seu projeto:

   $project = 'FOOBAR';

Feito. Agora vá em cia.vc e logue no labmacambira (solicite login/senha na listamacambira@googlegroups.com caso ainda não tiver).

Vá em Projects e adicione um novo projeto, ou clique direto aqui: http://cia.vc/account/projects/add

Digite um short name para o projeto e na aba Metadata, no campo Web Site URL coloque o caminho completo para seu repos (HTTP):

   http://labmacambira.git.sourceforge.net/git/gitweb.cgi?p=labmacambira/FOOBAR

Salve e vá na guia Bots (no menu esquerdo). Na aba Basic Filtering, na opção Filter by project, haverá uma janela de texto, adicione o nome do seu repos (FOOBAR) e Salve.

Pronto, dê um commit no seu clone local e veja se o bot no #labmacambira avisou.

Se você tiver um repositório Git no GitHub

Logue na sua conta no GitHub. Procure o botão Admin e clique nele. Vá em Service Hooks. Na lista que se abrirá, clique em CIA. Selecione a opção Active e clique em Update Settings (você poderá usar o botão Test Hook para testar enviando os últimos commits, após vc ter terminado todos esses passos seguintes).

Feito. Agora vá em cia.vc e logue no labmacambira (solicite login/senha para nós).

Vá em Projects e adicione um novo projeto, ou clique direto aqui: http://cia.vc/account/projects/add

Digite um short name para o projeto e na aba Metadata, no campo Web Site URL coloque o caminho completo para seu repos (HTTP):

   https://github.com/SEU_USUARIO/FOOBAR.git

Salve e vá na guia Bots (no menu esquerdo). Na aba Basic Filtering, na opção Filter by project, haverá uma janela de texto, adicione o nome do seu repos (FOOBAR) e Salve.

Pronto, dê um commit no seu clone local e veja se o bot no #labmacambira avisou.

Tutoriais e Informações Adicionais sobre Git

Canal do IRC sobre Git

  1. git ou #github no freenode

Ver Tambem

git - principais comandos

Controle de Perfil linux (home) usando git