Jestem odpowiedzialny za kilka (raczej małych) programów, które dzielą dużo kodu za pośrednictwem różnych bibliotek. Zastanawiam się, jaki jest najlepszy układ repozytorium, aby rozwinąć różne prorgramy (i biblioteki) i zachować synchronizację bibliotek we wszystkich programach.Układ repozytoriów Subversion dla bibliotek opracowanych w różnych programach
Dla argumentu powiedzmy istnieją dwa programy z dwóch bibliotek:
- Program1
- Library1
- Library2
- Program2.ldn
- Library1
- Library2
Naturalnie, poprawek i ulepszeń dla bibliotek powinny (ostatecznie) połączenie do wszystkich programów. Ponieważ biblioteki są opracowywane podczas pracy nad różnymi programami, korzystanie z externals definitions nie wchodzi w grę.
Więc myślałem, że traktuję moje biblioteki w każdym z wyjątkiem jednego miejsca jako vendor branches, ale nie jestem pewien, jaki byłby najlepszy układ.
Myślałam coś wzdłuż linii:
- Bibliotek
- Library1 (przodek)
- Library2 (przodek)
- Program1
- kodowych Program1
- Library1 (oddział sprzedawca)
- Library2 (oddział sprzedawca)
- ...
Wtedy powiedzieć przy opracowywaniu Program1 pewne zmiany są dokonywane na Library2, mogę połączyć je z powrotem do bibliotek część repozytorium i w razie potrzeby połączyć je ze wszystkimi pozostałymi programami.
Łączenie się z innymi programami nie zawsze może nastąpić natychmiast, osoby pracujące nad Programem 2 mogą być bliskie wydania, a raczej zakończyć je najpierw, utworzyć znacznik, a dopiero potem zaktualizować wszystkie biblioteki.
Jestem trochę zaniepokojony, że spowoduje to wiele fuzji i odrobinę bóle głowy konserwacji po pewnym czasie, ale naprawdę nie widzę o wiele lepszego rozwiązania.
To wydaje mi się dość powszechnym przypadkiem użycia, więc pomyślałem, że po prostu zapytam społeczność stackoverflow, jaki jest najlepszy układ repozytorium, aby to osiągnąć?
Dzięki za jasną, wyczerpującą odpowiedź, ale czy nie zmusiłoby to wszystkich zmian do bibliotek do wszystkich programów? Programy powinny mieć możliwość "zawieszenia się" do starszej wersji na jakiś czas, jeśli jest to pożądane (podczas gdy inne powinny być w stanie z powodzeniem zatwierdzić i pracować). Wyjaśniono nieco więcej. – Pieter
Pieter, żadne zmiany w bibliotekach nie wymuszają zmian we wszystkich programach. Jeśli musisz "zawiesić się" na starszą wersję biblioteki, zewnętrzna wersja powinna być oznaczona tagami (lub konkretną wersją z użyciem --revision). Nawet jeśli wyewidencjonujesz bagażnik, zmiany nie muszą być wypychane. – paxos1977