Manuals

Elementy zewnętrzne

Czasami dobrze jest zbudować kopię roboczą, która jest wykonana w wielu różnych pobraniach. Na przykład, możecie chcieć by różne pliki lub podkatalogi pochodziły z różnych miejsc w repozytorium, a może w ogóle z różnych repozytoriów. Jeśli chcecie, aby każdy użytkownik miał ten sam układ, można zdefiniować atrybut svn:externals by ułożyć określone zasoby w miejscach, gdzie są potrzebne.

Foldery zewnętrzne

Powiedzmy, że pobieracie kopię roboczą /project1 to D:\dev\project1. Wybierzcie folder D:\dev\project1, kliknijcie prawym przyciskiem myszy i wybierzcie Menu systemu WindowsWłaściwości z menu kontekstowego. Pojawi się okno Właściwości. Następnie przejdźcie do zakładki Subversion. Nie można ustawić właściwości. Kliknijcie Atrybuty.... W oknie atrybutów kliknijcie dwukrotnie na svn:externals jeśli już istnieje, albo kliknijcie na przycisk Nowy... po czym wybierzcie zewnętrzne z menu. Aby dodać nowy zewnętrzny, kliknijcie Nowy..., a następnie wypełnijcie wymagane informacje w pokazanym oknie dialogowym.

Ostrzeżenie

Adresy URL muszą być właściwie enkodowane lub nie będą działać, np. należy zastąpić każdą spację przez %20.

Jeśli chcecie by ścieżka lokalna zawierała spacje lub inne znaki specjalne, można ująć ją w cudzysłów, lub użyć znaku \ (odwrócony ukośnik) jako znak ucieczki powłoki Uniksa poprzedzający znak specjalny. Oczywiście oznacza to również, że należy używać / (ukośnik) jako ogranicznik ścieżki. Zauważcie, że to zachowanie pojawiło się dopiero w Subversion 1.6 i nie będzie działać ze starszymi klientami.

Użyj jawnych numerów wersji

Należy poważnie rozważyć używanie jawnych numerów wersji we wszystkich definicjach zewnętrznych, jak to opisano powyżej. Działanie takie oznacza, że trzeba samemu decydować, kiedy wypuścić kolejną migawkę informacji zewnętrznych i jaką dokładnie migawkę wypuścić. Poza zdroworozsądkowym aspektem braku zdziwienia zmianami repozytoriów firm trzecich, nad którymi nie ma żadnej kontroli, użycie jawnych numerów wersji oznacza również, że cofnięcie czasowe kopii roboczej do poprzedniej wersji spowoduje, że wasze zewnętrzne definicje będą także przywrócone do wyglądu z tej wcześniejszej wersji, co z kolei oznacza, że zewnętrzne kopie robocze zostaną zaktualizowane, aby dopasować ichemphasis> wygl

Okno edycji atrybutów svn:externals pozwala wybrać zewnętrzne i automatycznie ustawić je do wersji HEAD.

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.

Jeśli korzystacie z bezwzględnych adresów URL w svn:externals definicje i musicie przenieść swoją kopię roboczą (np. jeśli adres URL repozytorium się zmieni), to zewnętrzne nie ulegną zmianie i mogą już nie działać.

Aby uniknąć takich problemów, klienty Subversion w wersji 1.5 i wyższych wspierają w względne adresy URL zewnętrznych. Obsługiwane są cztery różne metody określania względnych adresów URL. W poniższych przykładach, że mamy dwa repozytoria: jedno na http://example.com/svn/repos-1, a drugie na http://example.com/svn/repos-2. Mamy pobrać z http://example.com/svn/repos-1/project/trunk do C:\Working a svn:externals jest ustawiony na linii głównej.

Względnie do katalogu nadrzędnego

Adresy te zawsze zaczynają się od ciągu ../ na przykład:

../../widgets/foo common/foo-widget

Wypakuje http://example.com/svn/repos-1/widgets/foo do C:\Working\common\foo-widget.

Należy pamiętać, że adres URL jest w stosunku do adresu URL katalogu z atrybutu svn:externals, a nie do folderu, w którym zewnętrzne są zapisane na dysku.

Względnie do katalogu głównego

Te adresy URL zawsze zaczynają się od ciągu ^/ na przykład:

^/widgets/foo common/foo-widget

Wypakuje http://example.com/svn/repos-1/widgets/foo do C:\Working\common\foo-widget.

Możecie łatwo odwołać się do innych repozytoriów z tym samym SVNParentPath (wspólny katalog zawierający kilka repozytoriów). Na przykład:

^/../repos-2/hammers/claw common/claw-hammer

Zostanie rozwinięty do http://example.com/svn/repos-2/hammers/claw do C:\Working\common\claw-hammer.

Względnie do schematu

Adresy URL zaczynające się od // kopiują tylko schemat z URL. Przydaje się to gdy ta sama nazwa hosta musi być dostępna z różnych systemów w zależności od lokalizacji w sieci, np. klienty w intranecie używają http:// podczas gdy klienty zewnętrzne używają svn+ssh://. Na przykład:

//example.com/svn/repos-1/widgets/foo common/foo-widget

Zostanie rozwinięty do http://example.com/svn/repos-1/widgets/foo lub svn+ssh://example.com/svn/repos-1/widgets/foo w zależności od metody użytej do pobrania C:\Working.

Względnie do nazwy serwera hosta

Adresy URL rozpoczynające się od ciągu / kopiują część adresu URL ze schematem i nazwą hosta, na przykład:

/svn/repos-1/widgets/foo common/foo-widget

Spowoduje to wypakowanie http://example.com/svn/repos-1/widgets/foo do C:\Working\common\foo-widget. Ale jeśli pobierzecie kopię roboczą z innego serwera svn+ssh://another.mirror.net/svn/repos-1/project1/trunk wtedy zewnętrzne odniesienie wypakuje svn+ssh://another.mirror.net/svn/repos-1/widgets/foo.

Możecie również, jeśli jest to wymagane, wskazać wersję wieszakową i obowiązującą dla URL. By dowiedzieć się więcej o wersjach wieszakowej i obowiązującej, przeczytajcie odpowiedni rozdział podręcznika Subversion.

Ważne

Gdy wskażecie jako folder docelowy folder podrzędny jak w przykładach powyżej, upewnijcie się, że wszystkie foldery pośrednie są również wersjonowane. Zatem w przykładach powyżej folder common powinien być pod kontrolą wersji!

O ile zewnętrzne będą zachowywać się poprawnie w większości sytuacji gdy foldery pomiędzy nimi nie są wersjonowane, mogą wystąpić operacje, które nie będą działać zgodnie z oczekiwaniami. A ikony nakładek statusu w eksploratorze również nie będą pokazywać poprawnego stanu.

Jeśli potrzebujecie więcej informacji, jak TortoiseSVN obsługuje atrybuty, przeczytajcie „Ustawienia projektu”.

Aby dowiedzieć się o różnych metod dostępu do wspólnych podprojektów przeczytajcie „Dołączanie wspólnego podprojektu”.

Pliki zewnętrzne

Od Subversion 1.6 można dodać jeden zewnętrzny plik do kopii roboczej przy użyciu tej samej składni, jak w przypadku folderów. Istnieją jednak pewne ograniczenia.

  • Ścieżka pliku zewnętrznego musi być bezpośrednim potomkiem folderu, w którym ustawiono atrybut svn:externals.

  • Adres URL dla pliku zewnętrznego musi leżeć w tym samym repozytorium, jak adres URL gdzie ten plik zostanie wstawiony; międzyrepozytoryjne pliki zewnętrzne nie są obsługiwane.

Plik zewnętrzny zachowuje się pod wieloma względami jak każdy inny wersjonowany plik, ale nie można go przesuwać ani usuwać za pomocą normalnych poleceń; zamiast tego musi być zmodyfikowany atrybut svn:externals.

Tworzenie zewnętrznych mechanizmem przeciągnij i upuść

Jeśli macie już kopię roboczą plików lub folderów które chcecie dołączyć jako zewnętrzne do innej kopii roboczej, możecie po prostu dodać je używając przeciągnięcia i upuszczenia w eksploratorze windows.

Po prostu przeciągnijcie prawym przyciskiem myszy plik lub folder z pierwszej kopii roboczej tam gdzie mają one być użyte jako zewnętrzne. Pojawi się menu kontekstowe po zwolnieniu przycisku myszy: SVN Dodaj jako zewnętrzne tutaj gdy kliknie się na ten element menu, atrybut svn:externals zostanie dodany automatycznie. Wszystko co trzeba potem zrobić to zatwierdzić zmiany atrybutów i zaktualizować by pobrać te zewnętrzne poprawnie dołączone do kopii roboczej.

TortoiseSVN homepage