W naszej firmie pracujemy nad produktem złożonym z różnych modułów C/C++. W idealnej sytuacji każda warstwa i moduł powinny być opracowywane oddzielnie przez różne zespoły i testowane niezależnie. Obecnie mamy odrębny każdego modułu w jego własnym oddziału: \svn: externals & tagging, jak łączyć kod pomiędzy zespołami
Moduły są:
\hid \branches \tags \trunk \api \branches \tags \trunk \ui \branches \tags \trunk
Oddzielnie, uwolnienie produkt jest zbudować łącząc moduły i zestawiane regularnie za pomocą systemu CI.
\productX \branches \5.0 \hid-4.0 (svn:externs \hid\branches\4.0) \api-3.0 (svn:externs \api\branches\3.0) \ui-5.0 (svn:externs \ui\branches\5.0) \tags \trunk
Głównym problemem, jaki mamy, jest zachowanie "tagu svn" w powiązaniu z efektami zewnętrznymi. Aktualne wersje odnoszą się do HEAD - ponieważ chcielibyśmy regularnie budować najnowszą wersję, aby wszystkie moduły działały razem. Jednak gdy kompilacja się powiedzie i przystąpimy do wydania, byłoby fajnie, gdyby istniał łatwy sposób automatycznego tagowania wszystkiego - łącznie z wersją używaną w wersji zewnętrznej. W obecnej postaci musimy utworzyć znaczniki dla modułów, a następnie zaktualizować te znaczniki zewnętrzne, a następnie oznaczyć produkt i ostatecznie zamienić go z powrotem na bagażnik.
Czy jest to czystszy sposób? Zapraszam również do komentowania obecnej struktury.
Dzięki Michael. Twoje komentarze odzwierciedlają to, co przeczytałem (dużo!) Na temat praktyk SVN svn: externs. Robimy głównie to, co zostało zasugerowane: najczęściej, produkt odnosi się do gałęzi modułów tagi * na koniec oznaczamy produkt *, a następnie ponownie zmieniamy adresy zewnętrzne do oddziałów To działa, ale jest bardzo uciążliwe i podatne na błędy. Miałem nadzieję, że jest lepszy sposób ... – Charles