Git
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
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@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
Tutoriais e Informações Adicionais sobre Git
- Apanhado cognoscível de Git no automata.cc
- Tutorial Git por Akita onrails
- Git for Windows
- Tutorial ilustrado de Git
- Guia prático de GIT
- Git Book
- Git Reference
- Guia visual para Git
Canal do IRC sobre Git
- git ou #github no freenode