2012-12-06 10 views
5

mam subrepository strukturę jak następuje w TortoiseHg:Korzystanie subrepositories z bitbucket i ToritoiseHg

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

Folder główny jest prywatnym repozytorium na bitbucket Subfolder1 jest prywatnym repozytorium na bitbucket SubFolder2 jest prywatnym repozytorium na bitbucket

plik .hgsub wewnątrz Folder główny wygląda tak:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 

Plik .hgsubstat wewnątrz MainFolder ma również prawidłowe nazwy guids i subrepository.

Problem pojawia się za każdym razem, gdy próbuję przepchnąć do bitbucket dla MainFolder, najpierw popycha Mainfolder, a następnie SubFolder1, ale gdy dojdzie do SubFolder2, TortoiseHg zgłasza błąd "abort: repozytorium nie ma związku".

Kiedy sprawdzam repozytorium Mainfolder na bitbucket, ma on zawartość SubFolder1 (powinien być tam podfolder).

Jak mogę to naprawić, aby Folder główny został poprawnie załadowany jako repozytorium nadrzędne, a SubFolder1 i SubFolder2 zostały wymienione jako podkatalog na bitbucket?

+1

Próbowałem też za pomocą [podścieżki] jak pokazano na przykład dla subrepository na [LINK] (https://bitbucket.org/kiilerix/subrepodemo/). Dodałem następujący po końcu mojego pliku .hgsub: (https: // (?: [^ @] + @)? Bitbucket \ .org/[^ /] +/[^ /] +)/(. *) = \ 1- \ 2 To nie działało, ponieważ repozytorium nie istnieje dla zastępowanego interfejsu użytkownika. Czy jest jakiś inny sposób na zrobienie tego bez zmiany nazw wszystkich moich repozytoriów, aby pasowały do ​​wyrażenia regularnego. Również dlatego, że jest to prywatne repozytorium, bitbucket dodaje nazwę użytkownika do sformatowanego linku i kończy się niepowodzeniem dla innych użytkowników. – samirjaiswal

Odpowiedz

6

Zaprezentowany w dokumentacji bitbucket example wymaga zmiany nazw repozytoriów tak, aby wszystkie repozytoria nosiły nazwę MainRepository-SubRepository. Nie chciałem zmieniać nazw wszystkich moich repozytoriów, więc zmodyfikowałem wyrażenie regularne, jak pokazano na poniższym przykładzie, i teraz działa poprawnie. Ta wersja nie wymaga separatora myślników w nazwie repozytorium, główne repozytorium i podkatalogi mogą być niezależnie nazwane. Przykładowy .hgsub wygląda następująco:

SubFolder1 = SubFolder1 
SubFolder2 = SubFolder2 
[subpaths] 
(https://(?:[^@][email protected])?bitbucket\.org/[^/]+)(/[^/]+)/(.*) = \1/\3 
1

Bitbucket nie robi podrepos in situ. W rezultacie, Mercurial próbuje przesłać każdy z twoich repozytoriów w to samo miejsce i narzeka, kiedy próbujesz wcisnąć SubFolder2 repo do zdalnej kopii repozytorium SubFolder1.

Podstrefy są rzekomo bibliotekami, które są współdzielone między wieloma projektami, a zatem nie podlegają jednemu głównemu repo, ale zamiast tego znajdują się w ich własnej przestrzeni. Dlatego należy utworzyć osobne zdalne repozytoria, aby pomieścić każde podskładniki (bibliotekę) i odwoływać się do oddzielnej ścieżki zdalnej w pliku .hgsub.

Na przykład, przykład projekt może mieć trzy bitbucket hostowane repozytoria

https://bitbucket.org/bitbucketname/main_project 
https://bitbucket.org/bitbucketname/library1 
https://bitbucket.org/bitbucketname/library2 

Chcesz filespace lokalnego klona wyglądać tak:

/MainFolder/ 
/MainFolder/SubFolder1 
/MainFolder/SubFolder2 

w lokalnym klon main_project (Folder główny), ustaw domyślną ścieżkę macierzystego repozytorium na https://bitbucket.org/bitbucketname/main_project

tj. /MainFolder/.hg/hgrc zawiera

[paths] 
default = https://bitbucket.org/bitbucketname/main_project 

Teraz wskaż ścieżki zdalne podskładników/bibliotek w pliku .hgsub. Ogólny format pliku.wpisy hgsub jest:

local/path/to/subrepo = remote/path/to/matching/library 

Więc .hgsub może zawierać lokalnych i zdalnych względnych ścieżek (w stosunku do lokalizacji głównego repo lokalnie lub zdalnie, w zależności od przypadku może być):

SubFolder1 = ../library1 
SubFolder2 = ../library2 

lub względne lokalne ścieżki z bezwzględnych ścieżek dostępu do zdalnego repo każdej biblioteki w:

SubFolder1 = https://bitbucket.org/bitbucketname/library1 
SubFolder2 = https://bitbucket.org/bitbucketname/library2 

lub bezwzględne ścieżki do wszystkiego:

/MainFolder/SubFolder1 = https://bitbucket.org/bitbucketname/library1 
/MainFolder/SubFolder2 = https://bitbucket.org/bitbucketname/library2 

Teraz, kiedy wypychasz z lokalnego głównego projektu, Mercurial wie dokładnie, gdzie znaleźć wszystkie podskładniki (lokalnie) i gdzie przesłać zmiany wprowadzone do każdej biblioteki (zdalnie).

Dodatkowo, powiedzmy, że chcesz dodać do projektu inną bibliotekę. Wtedy twój .hgsub może wyglądać tak:

SubFolder1 = ../library1 
SubFolder2 = ../library2 
another_library = https://bitbucket.org/honkaboy/honkaboys_excellent_library