2010-03-03 14 views
22

Walczę o to, jak poprawnie śledzić repozytoria zagnieżdżone za pomocą TortoiseHg.Jaki jest poprawny sposób obsługi zagnieżdżonych repozytoriów Hg ​​za pomocą Mercurial/TortoiseHg?

Mam główne repozytorium, które śledzi mój cały projekt. Ten projekt zawiera kilka małych wtyczek, które są przechowywane w podkatalogu plugins /.

Chciałbym śledzić każdą wtyczkę niezależnie (zobowiązując się i naciskając na BitBucket dla każdego z nich), jednocześnie będąc w stanie wykonać "cały" commit mojego projektu, włączając zmiany wprowadzone do wtyczek i popychając je do inna lokalizacja (nie BitBucket).

To, co zrobiłem do tej pory, tworzy nowe repozytorium dla każdej z moich wtyczek. Mogę się zaangażować i z łatwością wepchnąć je do BitBucket. Ale kiedy poszedłem do zatwierdzenia mojego "głównego" repozytorium, TortoiseHg wyświetla komunikat o błędzie informujący, że abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'.

Widzę, że robię coś nie tak, ale nie wiem, co.

Używam nocny z Mercurial i TortoiseHg (ToirtoiseHg wersja 0.9.3 + 237-ea50f793bbe4 i Mercurial-1.4.3 + 225-70dea42c9406) na WinXP. Czytałem, że obsługa tego podrzutu została dodana do tej wersji TortoiseHg, ale, cóż, nie jestem nawet pewien, czy subrepos to funkcja, której powinienem użyć tutaj.

Aktualizacja
Zrobiłem pewne postępy, ale wciąż nie może zmusić go do pracy tak, że mi się podoba.
Oto moja konstrukcja:

-- .hg 
-- core 
-- app 
    -- file.php 
    -- file.css 
    -- plugins 
     -- plugin1 
      -- file1.php 
     -- plugin2 
      -- file2.php 

Poszedłem do app/plugins i sklonowany do wtyczki (o nazwie plugin3) od BitBucket tutaj. Następnie utworzyłem plik .hgsub w katalogu głównym i dodałem do niego app/plugins/plugin3 = app/plugins/plugin3. Byłem wtedy w stanie zatwierdzić mój cały katalog.

Ale wtedy próbowałem pobrać najnowszą wersję plugin1 z BitBucket, więc poszedłem do app/plugins, usunąłem plugin1/folder i sklonowałem plugin1 z BitBucket. Następnie dodałem app/plugins/plugin1 = app/plugins/plugin1 do .hgsub, ale kiedy próbowałem go zatwierdzić, powitano mnie: abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

Problem pojawia się, gdy moje subrepo ma taką samą nazwę jak katalog już śledzony przez Hg w katalogu wtyczek /.

Co robię źle? Czy powinienem dodać/edytować coś specjalnego w .hg moich wtyczek?

Aktualizacja
W końcu udało mi się zmusić go do działania tak, jak chcę.
Musiałem "ręcznie" powiedzieć Mercurial, aby usunąć katalogi plugins/plugin1, plugins/plugin2, zatwierdzić zmianę, a następnie sklonować wtyczkę 1 i plugin2 z BitBucket, dodać app/plugins/plugin1 = app/plugins/plugin1 do .hgsub i zatwierdzić wszystko. Zadziałało.
Ważnym krokiem było zatwierdzenie po usunięciu folderów plugin1/plugin2.

+0

Z dokumentu, wiersz z ".hgsub" jest "Pierwszy" zagnieżdżony "jest ścieżką w naszym roboczym katalogu, a drugi jest adresem URL lub ścieżką do pobrania z": więc nie powinieneś umieszczać " app/plugins/plugin3 = app/plugins/plugin3' ale 'app/plugins/plugin3 = bitbucket url for plugin3'. Ditto for plugin1 – VonC

+0

Próbowałem tego, używając 'http: // bitbucket.org/username/plugin3 /', 'https: //nazwa_użytkownika @ bitbucket.org/username/plugin3 /' a nawet 'ssh: // hg @ bitbucket.org/nazwa_użytkownika/plugin3' jako adres URL, ale nadal mają ten sam komunikat o przerwaniu. Próbowałem alos bezpośrednio z wiersza poleceń, a wynik jest taki sam. – pixelastic

+0

Przykro mi, że nie odpowiedziałem na Twój ostatni komentarz, ale jeśli Twój komentarz nie zaczyna się od "@VonC", nie zostałbym powiadomiony. Zobacz http://blog.stackoverflow.com/2010/01/new-improved-comments-with-reply/ (sekcja "Comment @username Notifications") – VonC

Odpowiedz

18

W końcu udało mi się sprawić, że będzie działać tak, jak bym chciał. Używam TortoiseHg na WinXP, więc nie będę w stanie powiedzieć, jakie wywołania hg zostały wykonane wewnętrznie, ale nie sądzę, że tutaj użyto niczego wymyślnego.

Zacząłem od istniejącego repo, w którym miałem katalog plugins/ wypełniony katalogami plugin1/, plugin/2 (nie repozytoriami, tylko proste katalogi). Też miałem te wtyczki online, hostowane na BitBucket.

  • raz pierwszy udał się do mojego katalogu plugins/, kliknij prawym przyciskiem na plugin1/, TortoiseHg => Remove Files.
  • wrócę do sedna mojego repo, kliknij prawym przyciskiem i Hg Commit
  • Wróciłem do mojego katalogu plugins/, kliknij prawym przyciskiem myszy, TortoiseHg => Clone... wybrałem adres http wtyczki na bitowej wiadra (http://bitbucket.org/username/plugin1/ i kliknięciu Done
  • znowu z powrotem do korzenia głównego repo. i stworzył (lub edytowane jeśli plik już istnieje) plik .hgsub i dodaj linię plugins/plugin1 = plugins/plugin1 wewnątrz niego.
  • byłem wtedy w stanie albo popełnić korzenia głównego repo lub repozytorium plugin1 niezależnie

Należy zauważyć, że dodatkowe kroki remove i commit są wymagane tylko w przypadku, gdy nowo sklonowane repo ma taką samą nazwę już zapisanego katalogu.

+0

@Pixelastic: dziękuję za informację zwrotną (+1) – VonC

+0

Słodka. Odpowiedziałeś na kilka pytań, które miałem. –

5

należy spróbować użyć:

Subrepositories to funkcja, która pozwala na traktuj zbiór repozytoriów jako grupę.
To pozwoli ci klonować, zatwierdzać, wciskać i przeciągać projekty i powiązane z nimi biblioteki jako grupę.

+0

Czy muszę ręcznie edytować pliki .hgsub, czy też TortoiseHg sam sobie z tym poradzi (poprzez sprawdzenie niektórych opcji)? – pixelastic

+0

@ Pixelastic: dla TortoiseHg i subrepos zobacz http: // stackoverflow.com/questions/2083393/mercurial-subrepos-how-do-you-create-them-and-how-do-it-work – VonC

+0

@VonC: Dzięki, ale przeczytałem już ten artykuł i nie chcę mieć moje wtyczki w oddzielnym folderze jako mojej głównej aplikacji, chciałbym je jako podkatalogi. Zaktualizowałem główne pytanie z moimi postępami. Dziękuję za poświęcony czas – pixelastic

Powiązane problemy