Chcesz, aby twoje centralne repozytorium było puste. Powiedzmy, że maszyna, na której żyje, nazywa się static
:
$ ssh static git init --bare /git/myproject.git
To nagie repozytorium jest centralnym punktem spotkania: służy do przepychania się i wyciągania z niego, a nie rozwoju.
Wykonaj swój rozwój na klonach centralnego repozytorium:
$ cd ~/src
$ git clone static:/git/myproject.git
Nawet jeśli jesteś włączony static
, pracuj w klonie:
$ git clone /git/myproject.git
Chociaż tylko ty pracujesz nad tym repozytorium, przyzwyczaj się do pracy nad tym, co dokumentacja git nazywa gałęziami tematycznymi . Bezpośrednią korzyścią z tego jest to, że utrzymuje czysty wzorzec , to znaczy, że zawsze możesz wyciągnąć z centralnego oddziału głównego do wzorca bieżącego lokalnego repozytorium bez scalania.
Na przykład:
$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."
To może nie wydawać się wielkim problemem, ale daje ci swobodę pozostawienia projektu przedstawionego na tej gałęzi w stanie częściowo ugotowanym, lub jeśli twój fajny pomysł okaże się flopem, możesz łatwo wyrzucić tę gałąź bez niszcząc wszystko inne w twoim projekcie, co już działa na innych gałęziach. Nieskończone darmowe mulligany!
Może tej nocy wrócisz do domu i dodasz nową funkcję. Następnego dnia rano ty
$ git checkout master
$ git pull
zaktualizować lokalnego wzorca, aby odzwierciedlić zawartość centralnego repozytorium.
Ale teraz powiedz, że naprawiłeś błąd foo i jesteś gotowy, aby włączyć go do głównej gałęzi. Najpierw chcesz zintegrować go ze zmianami z ostatniej nocy:
$ git checkout fix-bug-in-foo
$ git rebase master
To rebase
polecenie sprawia, że twoje repozytorium wygląda tak, jakbyś naprawił błąd foo nad nową funkcją zeszłej nocy. (Jest to trochę podobne svn update
, ale bardziej elastyczne i wydajne).
Teraz, aby dostać się do swojego centralnego mistrza:
$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master
Traktowaliśmy mistrza jako coś wyjątkowego, ale to tylko konwencjonalne. Możesz static
równie łatwo udostępniać pracę w różnych gałęziach różnych repozytoriów za pośrednictwem repozytorium git .