2012-01-16 13 views
5

Mam aplikację w wersji 1.0. Teraz muszę rozpocząć pracę nad wersją 2.0, ale jednocześnie utrzymywać i naprawiać błędy w wersji 1.0.Workflow do pracy z dwiema wersjami projektu w Mercurial

Poprawki od 1.0 zostaną połączone w wydaniu 2.0 ale żadna nowa funkcjonalność zostanie przeniesiona z 2.0 do 1.0 wydaniu.

Rozumiem, jak działają gałęzie, ale muszę mieć możliwość pracy w obu wersjach w tym samym czasie, więc przełączanie między gałęziami w tym samym folderze roboczym jest niepraktyczne. Chcę być w stanie uruchomić obie wersje kodu w tym samym czasie.

Jaka jest typowa konfiguracja lub przepływ pracy, aby móc pracować na dwóch wersjach tej samej aplikacji używającej nazwanych oddziałów w tym samym czasie? np. działa z jednym odgałęzieniem w jednym folderze i innym oddziale w innym folderze?

Czy mogę po prostu sklonować repozytorium do nowego folderu dla wersji 2.0 i ustawić gałąź na wersję 2.0?

Jestem trochę nowy w Mercurial, więc proszę wybacz mi, jeśli to brzmi trochę naiwnie.

+1

Spróbuj: http://nvie.com/posts/a-successful-git-branching-model/ ma na celu GIT, ale działa dla Mercurial. To może pomóc w twoim problemie. – PostMan

+0

Zrobiłbym dokładnie to, co sugerujesz: Miej dwie wyewidencjonowane (sklonowane) wersje kodu, jedną dla wersji 1.0 i jedną dla wersji 2.0. –

Odpowiedz

7

Czy po prostu sklonowałem repozytorium do nowego folderu dla wersji 2.0 i ustawiłem gałąź na wersję 2.0?

Tak, oddzielny klon dla każdej głównej wersji będzie dobrze. Jednak powinieneś zachować swój główny rozwój on the default branch i używać nazwanych oddziałów dla każdej głównej wersji. Pozwól mi uruchomić poprzez workflow:

Gdy wersja 1.0 jest zrobione, co robisz

$ cd ~/src/foo 
$ hg tag 1.0 
$ hg push http://your-server/foo 

a następnie można kontynuować pracę w tym klonie wobec wersji 2.0. Gdy okaże się, że trzeba naprawić błąd w 1.0, robisz

$ cd ~/src 
$ hg clone http://your-server/foo foo-1.x 
$ cd foo-1.x 
$ hg update 1.0 
$ hg branch 1.x 
$ hg commit -m "Starting 1.x branch" 
# now fix the bug... left as an exercise to the reader :) 
$ hg commit -m "Fixed issue123" 
# do QA to test the bugfix, make more commits as necessary 
$ hg tag 1.1 
$ hg push --new-branch 
# make a release 

--new-branch flaga jest konieczne tylko przy pierwszym naciśnięciu. Mówi to Mercurialowi, że naprawdę chcesz stworzyć nową stałą gałąź w historii.

Teraz chcą wyciągnąć Bugfix do innego repozytorium:

$ cd ~/src/foo 
$ hg pull http://your-server/foo 
$ hg merge 1.x 
$ hg commit -m "Merge with 1.1" 

Stosując named branch dla serii 1.x, zawsze można użyć hg update 1.x aby przejść do najnowszej changeset na tym oddziale. Pomyśl o 1.x jako "zmiennym tagu", który zawsze wskazuje na najbardziej zmienny wierzchołek w tej gałęzi. Ten proces jest opisany w standard branching wiki page.

+1

+1. Być może warto zauważyć, że w domyślnym Mercurialu, potrzebowałbyś 'hg push -f', aby wymusić wypychanie z gałęzi 1.x ... ponieważ będziesz naciskał nową głowę, która nie jest dopuszczalna bez" forsowania " .W pojedynczej linii rozwojowej dodatkową głowicą zazwyczaj zajmują się łączenie, ale nie jest to pożądane. – icabod

+1

@icabod: dziękuję, zapomniałem o flagce '--new-branch'. Jest to bardziej kontrolowana forma '-f', która pozwala naciskać nowe gałęzie, nie pozwalając na naciskanie wielu głowic. –

+1

Ah, nie używałbym wcześniej '--new-branch', być może jako irytujący zwyczaj tworzenia anonimowych gałęzi, dla których' -new-branch' nie działa. "Jest dobry dla nazwanych gałęzi tho". Wykorzystam to w przyszłości :) – icabod

Powiązane problemy