svn merge

Trochę głupio w SVN jest zorganizowane zarządzanie gałęziami. Niby pojęciowo łatwo, bo to tylko kopia katalogu, ale prowadzi to do problemów.

Ponieważ każdą kopię katalogu można traktować jak branch, to z każdego takiego katalogu można merge'ować zmiany. Ale jak zapamiętać, co gdzie było merge'owane? Subversion zapisuje atrybut svn:mergeinfo. Wygląda ładnie i elegancko, do momentu gdy trzeba z tym popracować.

Okazuje się, że można wykonać merge, ale nie zapisać metadanych (commitując zawartość brancha, ale omijając sam katalog). W ten sposób zepsuty branch nie nadaje się już właściwie do niczego. Można próbować uzupełnić kolejnym commitem metadane, żeby z innych branchy (z trunka?) nadal można było ściągać zmiany, ale o merge'owaniu w drugą stronę można zapomnieć. Łatwiej jest usunąć branch i utworzyć go ponownie.

Gdy przychodzi do merge'owania gałęzi, nigdy nie wiem, kiedy użyć svn merge, a kiedy svn merge --reintegrate. SVN Book mówi, że pierwsze jest do wciągania zmian z trunka do gałęzi, a drugie do odwrotnej operacji. Prawda jest taka, że to działa tylko przy modelu pracy, gdy gałąź po reintegracji z trunkiem jest usuwana. Gdy pracuje się na gałęzi dłużej, czasem trzeba z trunka merge'ować z opcją --reintegrate, a czasem bez -- i nie jest oczywiste, kiedy które. Moim zdaniem to porażka programistów od interfejsu i backendu.

Wysłany: 17 kwietnia 2012, 11:07:40; 2 komentarze