2009-09-24 34 views
7

Pracuję nad gałęzią funkcji i wprowadzam pewne zmiany w mojej gałęzi funkcji, które będą miały wpływ na innych programistów. Chciałbym zatwierdzić te nowe zmiany w bagażniku, aby nikt nie został zmuszony do naprawienia przerwy; jednak nie chcę przypisywać reszty gałęzi funkcji, ponieważ nie jest ona jeszcze w pełni funkcjonalna.Najlepsze praktyki scalania SVN

Odgałęziłem bagażnik w r109. W moim oddziale wszystkie zmiany w łączniku zostały połączone do r145. Zobowiązałem się, że moja zmiana "wpłynie na innych programistów" na mój oddział w r152 i r153.

mój proces myślowy tutaj było svn przełączyć moją kopię roboczą do bagażnika, a następnie wykonaj:

svn merge svn: // projekt/oddział/myBranch -r 146: 153 ./project

SVN narzeka na konflikty, ponieważ bagażnik zawiera oryginalną wersję jednego z plików, które zmieniłem, a ja tylko łączę się z ostatnimi zmianami (wprowadziłem kilka zmian do tego pliku we wcześniejszym zatwierdzeniu do mojego oddziału), a także narzeka na konflikty z plikiem innego dewelopera zmienionego w r149. Ponieważ mój oddział zawierał tylko scalenia z bagażnika do r145, zanim został zatwierdzony, mój oddział nie odzwierciedla tej zmiany.

To jest w porządku - konflikty są łatwe do rozwiązania, ale martwię się, że będę miał kłopot wiele dni, kiedy chcę ponownie zintegrować moją gałąź z bagażnikiem.

Ewentualnie mogę wprowadzić niezbędne zmiany w bagażniku, a następnie połączyć je w swoją gałąź, ale nie podoba mi się to podejście, ponieważ zmiany są już wykonywane w oddziale. Nie ma sensu robić ich dwa razy.

Czy ktoś ma pewne doświadczenie z częściowym łączeniem gałęzi obiektów w bagażnik, po którym następuje pełna reintegracja? Jaka jest najlepsza strategia tutaj?

Odpowiedz

4

Jeśli kolejność zmian w oddziale nie ma większego znaczenia, być może uda się scalić tylko te zmiany z powrotem do bagażnika, a następnie scalić pozostałe, gdy funkcja będzie gotowa do ponownej integracji.

Jeśli to możliwe, chciałbym uniknąć całej sytuacji, czekając ze zmianą, aż oddział będzie gotowy do połączenia.

W większości przypadków, jeśli jest to zmiana, która powinna być wykonana na bagażniku od razu, radziłbym dokonać zmiany na pinie , a nie oddziału, a następnie połączyć się z pnia do gałęzi, tak jak zwykle robią.

+0

Dzięki! Uświadomiłem sobie, po zobowiązaniu go do mojej branży, że to jest coś, co powinno być zrobione na bagażniku zamiast tego. W przeciwnym razie zrobiłbym to tak, jak zasugerowałeś. –

1

Aby mieć pewność, że zachowujesz wszystkie modyfikacje dokonane przez Ciebie lub innych programistów, które chcesz zachować i żadną z modyfikacji, których nie chcesz, myślę, że prawdopodobnie musisz ręcznie połączyć wszystkie pliki będące w konflikcie za pomocą LabVision's LVMerge graficzne narzędzie do łączenia. Miałem duży sukces, używając go w połączeniu z tortoisesvn - tutaj są instrukcje jak zintegrować LVMerge do SVN i wykorzystuje ją do rozwiązywania konfliktów wersji:

http://www.dmcinfo.com/Blog/articleType/ArticleView/articleId/136/Using-LVmerge-LabVIEW-Merge-Tool-with-TortoiseSVN.aspx

+1

Czym to narzędzie różni się od narzędzia scalania żółwia? – SeanJA