2009-12-23 10 views
5

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.

Odpowiedz

3

Myślę, że lepiej byłoby, gdyby twoje definicje zewnętrzne odnosiły się do znaczników modułów, a nie do ich pni. W ten sposób zyskujesz tylko znane kamienie milowe modułów i nic nie będzie musiało się zmieniać po oznaczeniu produktu kluczowego.

Jest to zgodne z najlepszą praktyką (sugerowaną w dokumentacji SVN) polegającą na użyciu wyłącznie wersji jawnych (zamiast HEAD) w wersji svn:externals.

+1

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

Powiązane problemy