Git

De Pontão Nós Digitais
Revisão de 22h22min de 11 de dezembro de 2011 por Daneoshiga (discussão | contribs) (Ver Tambem)

Para uma breve lista de comandos, veja Comandos Git.

Para aprender Git, veja Literatura recomendada pela equipe#Git

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

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

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

Clone-o:

   git clone ssh://USERNAME@labmacambira.git.sourceforge.net/gitroot/labmacambira/NOME_REPOS

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

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@labmacambira.git.sourceforge.net/gitroot/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: https://sourceforge.net/apps/trac/vxl/wiki/GitSvn

Para usar Git como interface para o CVS: https://sourceforge.net/apps/trac/vxl/wiki/GitCvs

Gerando patches pra comitadas

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

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 [2].

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@labmacambira.git.sourceforge.net/gitroot/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


Canal do IRC sobre Git

  1. git ou #github no freenode



Ver Tambem

Comandos Git

Controle de Perfil linux (home) usando git