Od kilku lat używamy w praktyce svn:externals
wskazującego na współdzielony kod. Mieliśmy z tym kilka interesujących problemów, które powinieneś rozważyć przed użyciem. Oto struktura że mamy:
root
+---common
| +---lib1
| | \---trunk
| | +---include
| | \---src
| \---lib2
| \---trunk
| +---include
| \---src
+---proj1
| \---trunk
| +---include
| | \---common
| \---src
| \---common
\---proj2
\---trunk
+---include
| \---common
\---src
\---common
W common
katalogi zarówno include
i src
w projekcie zawierają definicje zewnętrznych, które ciągnąć w pomieszczeniach biblioteki:
c:\dev> svn pget -v svn:externals proj1\trunk\src\common
Properties on 'c:\dev\proj1\trunk\src\common':
svn:externals : lib1 http://.../common/lib1/trunk/src
lib2 http://.../common/lib2/trunk/src
Problem, który mamy uruchomić w to wieloaspektowe, ale związane z tagowaniem i rozgałęzianiem naszego źródła, ponieważ projekty zmieniają się w czasie. Definicja externals że pokazałem powyżej ma kilka dość poważne problemy, jeśli chcesz mieć powtarzalne buduje:
- To odnosi się do dynamicznego docelowego -
trunk
.
- Nie odnosi się to do jednoznacznej wersji.
Podczas rozgałęzienia za pomocą svn copy
, zewnętrzne są kopiowane dosłownie, ponieważ są one naprawdę tylko właściwościami dołączonymi do obiektu. Niektóre inne komendy svn (commit
, checkout
i export
) faktycznie interpretują właściwości. Kiedy tagujesz projekt, naprawdę chcesz zachować stan projektu przez cały czas. Oznacza to, że musisz "przypiąć" zewnętrzne do konkretnej wersji, więc musisz zmienić definicję zewnętrznych na jawną, odwołując się do wersji, którą chcesz (np. "lib1 -r42 http://.../common/lib1/trunk/src"
). To rozwiązuje jeden aspekt problemu.
Jeśli musisz zachować wiele niekompatybilnych gałęzi wspólnego kodu, musisz określić gałąź, którą chcesz jawnie wraz z (prawdopodobnie) wersją.
Nie trzeba dodawać, że może to być trochę ból głowy. Na szczęście ktoś na terenie Subversion pisze skrypt svncopy.pl
, który automatyzuje część tego bałaganu. Wciąż jesteśmy (i byliśmy) zmagający się z niektórymi trudnościami, które to wspierają w dziedzinie wdrożonego produktu z paczką wspólnego kodu i mandatem trzech różnych wersji w terenie w dowolnym momencie.
Jeśli zdecydujesz się na tę trasę, pamiętaj o tym, jak zachować powiązania w miarę rozwoju i zmian projektu. Przekonaliśmy się, że odrobina czasu na myślenie nad procesem będzie tutaj długa.
Zobacz podobne: http://stackoverflow.com/questions/130447/should-i-store-all-projects-in-one -repository-or-mulitiple – harpo
Próbowałem zaglądać na pytania SVN SO, ale tak naprawdę nie widziałem tej sytuacji. Przyznane, jak powiedziałem, nie mogłem naprawdę wymyślić, jak sformułować zapytanie ... – cwallenpoole