Vuoi che il tuo repository centrale sia nudo. Di 'che la macchina su cui vive si chiama static
:
$ ssh static git init --bare /git/myproject.git
Questo repository nudo è un punto di incontro centrale: serve per spingere e tirare da, non per lo sviluppo.
Fai il tuo sviluppo sui cloni del repository centrale:
$ cd ~/src
$ git clone static:/git/myproject.git
Anche se sei static
attivo, lavora in un clone:
$ git clone /git/myproject.git
Sebbene tu sia l'unico a lavorare su questo repository, prendi l'abitudine di fare il tuo lavoro su ciò che la documentazione git chiama rami di argomento . Un vantaggio immediato di questo è che mantiene un master pulito , ovvero puoi sempre estrarre dal tuo ramo master centrale nel master del tuo repository locale attuale senza alcuna fusione.
Per esempio:
$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."
Potrebbe non sembrare un grosso problema, ma ti dà la libertà di lasciare il progetto come rappresentato su quel ramo in uno stato parzialmente cotto, o se la tua bella idea si rivela un flop, puoi facilmente buttare via quel ramo senza rompere qualsiasi altra cosa nel tuo progetto che sta già lavorando su altri rami. Mulligan gratuiti infiniti!
Forse vai a casa quella sera e hai aggiunto una nuova funzionalità. La mattina dopo, tu
$ git checkout master
$ git pull
per aggiornare il tuo master locale per riflettere ciò che è nel repository centrale.
Ma ora dire che hai corretto il bug foo e sei pronto per includerlo nel tuo ramo principale. Per prima cosa vuoi integrarlo con le modifiche di ieri sera:
$ git checkout fix-bug-in-foo
$ git rebase master
Il rebase
comando fa sembrare il tuo repository come se avessi corretto il bug foo in cima alla nuova funzionalità di ieri sera. (Questo è un po 'come svn update
, ma più flessibile e potente.)
Ora per farlo entrare nel tuo maestro centrale:
$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master
Abbiamo trattato il maestro come speciale, ma è solo convenzionale. È possibile condividere il lavoro su diversi rami di repository diversi tramite il repository git static
altrettanto facilmente.