Jesteśmy małym sklepem niezależnych dostawców oprogramowania i zwykle co miesiąc wysyłamy nową wersję naszych produktów. Używamy Subversion jako naszego repozytorium kodu, a Visual Studio 2010 jako nasze IDE. Wiem, że wiele osób opowiada się za Mercurial i innymi rozproszonymi systemami kontroli źródła, ale w tej chwili nie widzę, jak moglibyśmy z nich skorzystać, ale mogę się mylić.
Naszym głównym problemem jest synchronizacja gałęzi i głównego pnia.
Oto jak dzisiaj robimy rzeczy:
- Wydaj nową wersję (automatycznie utwórz tag w Subversion)
- Kontynuuj pracę nad głównym bagażnikiem, który zostanie wydany w przyszłym miesiącu
Cykl powtarza się co miesiąc i działa idealnie. Problem powstaje, gdy konieczne jest zwolnienie pilnej wersji usługi. Nie możemy zwolnić go z głównego pnia (2), ponieważ jest on w fazie intensywnego rozwoju i nie jest wystarczająco stabilny, aby można go było natychmiast zwolnić.
W takim przypadku wykonujemy następujące czynności:
- Utwórz gałąź z tagu, który utworzyliśmy w kroku (1)
- Naprawa błędów
- Przetestuj i wypuść
- Wciśnij zmianę z powrotem do głównego bagażnika (jeśli dotyczy)
Naszym największym problemem jest połączenie tych dwóch (gałąź z główną). W większości przypadków nie możemy polegać na automatycznym scalaniu, ponieważ np .:
- wprowadzono wiele zmian w głównym bagażniku
- scalanie złożonych plików (takich jak pliki Visual Studio XML itp.) nie działa zbyt dobrze
- inny programista / zespół wprowadził zmiany, których nie rozumiesz i nie możesz ich po prostu scalić
Więc to, co Twoim zdaniem jest najlepszą praktyką, aby zachować synchronizację tych dwóch różnych wersji (gałęzi i głównej). Co robisz?