Você quer que seu repositório central esteja vazio. Diga que a máquina em que ele está se chama static
:
$ ssh static git init --bare /git/myproject.git
Este repositório nu é um ponto de encontro central: é para empurrar e extrair, não o desenvolvimento.
Faça o seu desenvolvimento em clones do repositório central:
$ cd ~/src
$ git clone static:/git/myproject.git
Mesmo se você estiver em static
, trabalhe em um clone:
$ git clone /git/myproject.git
Embora você seja o único que trabalha neste repositório, adquira o hábito de fazer o seu trabalho sobre o que a documentação do git chama de ramos de tópicos . Um benefício imediato disso é que ele mantém um master limpo , ou seja, você pode sempre extrair de sua ramificação principal central para o master do seu repositório local atual sem mesclar.
Por exemplo:
$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."
Isso pode não parecer grande coisa, mas dá a você a liberdade de deixar o projeto como representado naquele ramo em um estado parcialmente cozido, ou se a sua ideia legal se tornar um no flop, você pode facilmente jogar fora esse branch sem quebrar mais nada em seu projeto que já está trabalhando em outros branches. Mulligans infinitos e gratuitos!
Talvez você vá para casa naquela noite e tenha adicionado um novo recurso. Na manhã seguinte, você
$ git checkout master
$ git pull
para atualizar seu mestre local para refletir o que está no repositório central.
Mas agora digamos que você corrigiu o erro e está pronto para incluí-lo em sua ramificação principal. Primeiro você quer integrá-lo com as mudanças da noite passada:
$ git checkout fix-bug-in-foo
$ git rebase master
O comando rebase
faz seu repositório parecer como se você tivesse corrigido o bug foo no topo do novo recurso da noite passada. (Isso é como svn update
, mas mais flexível e poderoso.)
Agora, para entrar no seu mestre central:
$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master
Temos tratado o mestre como especial, mas isso é apenas convencional. Você pode compartilhar trabalhos em diferentes ramos de diferentes repositórios através do repositório git em static
com a mesma facilidade.