Você deseja que seu repositório central fique vazio. Digamos que a máquina em que ele vive tenha o nome static
:
$ ssh static git init --bare /git/myproject.git
Esse repositório simples é um ponto central de encontro: é para empurrar e puxar, não para o desenvolvimento.
Faça seu desenvolvimento em clones do repositório central:
$ cd ~/src
$ git clone static:/git/myproject.git
Mesmo se você estiver participando static
, trabalhe em um clone:
$ git clone /git/myproject.git
Embora você seja o único a trabalhar neste repositório, adquira o hábito de fazer o que a documentação do git chama de ramificações de tópicos . Um benefício imediato disso é que ele mantém um mestre limpo , ou seja, você sempre pode extrair da ramificação do mestre central para o mestre 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 acabar sendo um fracasso, você pode facilmente jogar fora esse ramo sem quebrando qualquer outra coisa em seu projeto que já esteja trabalhando em outras ramificações. Mulligans grátis infinitos!
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 há no repositório central.
Mas agora diga que você corrigiu o erro foo e está pronto para incluí-lo no seu ramo principal. Primeiro você deseja integrá-lo às mudanças da noite passada:
$ git checkout fix-bug-in-foo
$ git rebase master
O rebase
comando faz com que seu repositório pareça que você corrigiu o bug foo sobre o novo recurso da noite passada. (É mais ou menos assim svn update
, mas mais flexível e poderoso.)
Agora, coloque-o 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 o trabalho em diferentes ramos de diferentes repositórios através do repositório git com static
a mesma facilidade.