Niekiedy potrzeba zawrzeć inny projekt w kopii roboczej, może tu chodzi o kod biblioteki. Mamy co najmniej 4 sposoby poradzenia sobie z tym.
Ustawcie atrybut svn:externals
dla folderu w projekcie. Ten atrybut składa się z jednej lub więcej linii, każda linia zawiera nazwę podfolderu, którego chcecie użyć jako folderu pobrania dla wspólnego kodu oraz adres URL repozytorium, z którego mają być robione pobrania. Aby uzyskać szczegółowe informacje sprawdźcie „Elementy zewnętrzne”.
Zatwierdźcie nowy folder. Teraz po aktualizacji, Subversion będzie zaczytywać kopię tego projektu z jego repozytorium do kopii roboczej. Podfoldery będą w razie potrzeby tworzone automatycznie. Podczas każdej aktualizacji podstawowej kopii roboczej, otrzymacie również najnowsze wersje wszystkich zewnętrznych projektów.
Jeśli zewnętrzny projekt leży w tym samym repozytorium, wszelkie zmiany w nim wprowadzone będą włączone do listy zatwierdzenia, jeśli użytkownik zatwierdza główny projekt.
Jeśli zewnętrzny projekt znajduje się w innym repozytorium, wszelkie zmiany wprowadzone do zewnętrznego projektu zostaną pokazane lub oznaczone podczas zatwierdzenia głównego projektu, jednak wymagane jest osobne zatwierdzenie tych zewnętrznych zmian.
Z trzech opisanych metod, ta jest jedyną, która nie wymaga instalacji po stronie klienta. Po określeniu zewnętrznych we właściwości folderu, wszystkie klienty dostaną zapełnione foldery podczas aktualizacji.
Utwórzcie nowy folder w ramach projektu aby zawierał wspólny kod, ale nie dodawajcie go do Subversion.
Wybierzcie
→ dla nowego folderu i pobierzcie do niego kopię wspólnego kodu. Teraz macie oddzielną kopię roboczą zagnieżdżoną w głównej kopii roboczej.Dwie kopie robocze są niezależne. Kiedy dokonujecie zmian w rodzicu, zmiany zagnieżdżonej KR są ignorowane. Podobnie po aktualizacji rodzica, zagnieżdżona KR nie jest aktualizowana.
Jeśli używacie tego samego wspólnego jądra kodu w kilku projektach, a nie chcecie przechowywać wielu kopii roboczych to dla każdego projektu, który go używa, wystarczy je pobrać w innym miejscu, które jest powiązane z wszystkimi innymi projektami, które z niego korzystają. Na przykład:
C:\Projects\Proj1 C:\Projects\Proj2 C:\Projects\Proj3 C:\Projects\Common
i odnosić się do wspólnego kodu przy użyciu ścieżki względnej, np. ..\..\Common\DSPcore
.
Jeśli projekty są rozproszone w niezależnych miejscach można użyć wariantu, polegającego na umieszczeniu wspólnego kodu w jednym miejscu, wykonaniu substytucji napędu dla tej lokalizacji, by otrzymać literę dysku do wpisania na sztywno w kodzie projektów, np. Pobierzcie wspólny kod do D:\Documents\Framework
lub C:\Documents and Settings\{login}\My Documents\framework
następnie wykonajcie
SUBST X: "D:\Documents\framework"
aby utworzyć mapowanie dysku używanego w kodzie źródłowym. Wasz kod może wtedy użyć absolutnej lokalizacji.
#include "X:\superio\superio.h"
Ta metoda działa tylko w środowisku wszystkich PC, i trzeba będzie udokumentować wymagane mapowania dysków tak, by wasz zespół wiedział, gdzie znajdują się te tajemnicze pliki. Metoda ta jest do zastosowania wyłącznie w zamkniętych środowiskach programistycznych, i nie zalecana do ogólnego użytku.
Prawdopodobnie najprostszym sposobem jest dodanie projektu w podfolderze własnego projektu w kopii roboczej. Jednak ma to taką wadę, że trzeba aktualizować i uzupełniać ten projekt zewnętrzny ręcznie.
Aby pomuc w aktualizacji, TortoiseSVN posiada polecenie w menu kontekstowym przesunięcia prawym klawiszem. PO prostu przesuń prawym przyciskiem myszy folder z rozpakowaną nową wersją biblioteki zewnętrznej do katalogu w kopii roboczej, a następnie wybierz
→ . Spowoduje to skopiowanie nowych plików do folderu docelowego automatycznie dodając nowe pliki i usuwając pliki nie występujące już w nowej wersji.