2010-03-20 18 views
8

nie mogę TortoiseHg (1.0) do pracy z subreposTortoiseHg i subrepos

Mam strukturę katalogów takiego:

root 
    .hg 
    .hgsub 
    .hgsubstate 
    Customer1 
    Project1 
     .hg 
     foo.txt 
    Project2 
     .hg 
    Customer2 
    Project3 
     .hg 

plik .hgsub pod korzeń wygląda jak

Customer1\Project1=Customer1\Project1 
Customer1\Project2=Customer1\Project2 
Customer2\Project3=Customer2\Project3 

Po zmodyfikowaniu pliku Customer1\Project1\foo.txt i zatwierdzeniu z katalogu głównego działa

>hg ci -m "command line commit" 
committing subrepository customer1\project1 

w TortoiseHg customer1\project1 jest wyświetlany ze statusem S (subrepo) ale kiedy popełnienia dostaję komunikat

abort: customer1/project1: no match under directory! 

Czy nie jest to scenariusz obsługiwane albo robię coś źle?

Doc mówi:.
„TortoiseHg 1.0 wprowadziła szczątkowe wsparcie dla subrepositories, a tylko w narzędziu popełnić/status Kiedy Mercurial uznaje subrepo jako brudne, pojawi się ona w narzędziu popełnienia jako specjalnego wpisu w lista plików o statusie S. Jeśli subrepo znajduje się na liście plików zatwierdzenia, subrepo zostaje zatwierdzone wraz z innymi zmianami, aktualizując plik .hgs w macierzystym repozytorium. "

+0

mam ten sam problem. Wygląda na to, że może ma to coś wspólnego z "tortoisehg próbuje zatwierdzić client1/project1 zamiast customer1 \ project1 (backslash)" Zatwierdzenie z linii poleceń nie powoduje żadnych problemów. – drye

Odpowiedz

9

Miałem prawie ten sam problem i zacząłem próbować całej gamy wariacji i w końcu udało mi się to dla mnie zrobić, używając ukośnika (/) po obu stronach znaku równości, a nie ukośnika (\) gdziekolwiek.

Więc spróbuj ...

Customer1/Project1=Customer1/Project1 
Customer1/Project2=Customer1/Project2 
Customer2/Project3=Customer2/Project3 

Również, gdy to nie działa, mój .hgsubstate plik miał tylko kilka zer w nim. Kiedy zaczął działać, miał oryginalny GUID.

+0

Dzięki, odszedłem od podskrobów, więc sam nie potrzebuję tego, ale ufam twoim badaniom i zaznacz to jako odpowiedź. – adrianm

+7

do czego się przeprowadziłeś? –

2

Myślę, że problem jest z określeniem „Customer1 \ Project1” jako repozytorium sub ponieważ Customer1 powinna być zagnieżdżona repozytorium, jak również.

Customer1 i KLIENT2 powinny mieć oba pliki '.hgsub' opisujące subrepos wewnątrz nich (project1/2)

Remake swoją Customer1 repozytorium gdzie indziej i sklonować Project1 i Project2 do niego. Dodaj Project1 i Project2 wpisów do pliku ".hgsub" w ramach Customer1.

Następnie wykonaj to samo dla repozytorium Customer2.

Pamiętaj, że zagnieżdżone repozytoria można sami być zagnieżdżone więc stworzyć repozytorium „root”, a następnie sklonować Customer1 i KLIENT2 w to pamiętając, aby dodać wpisy do pliku .hgsub.

Zatwierdź "root" i powinieneś czuć się dobrze.

Kluczem jest przeniesienie zmian ze wszystkich wystąpień podobieństwa do jego wzorca klonowania, aby inne klony zawierające te podobiekty były w stanie pobrać tę wersję w razie potrzeby.

Mam wszystkie repozytorium główne w tym samym folderze nadrzędnym na moim komputerze, dzięki czemu umieszczanie względnych ścieżek w plikach ".hgsub", takich jak "../Project1" lub "../Customer1", jest prostym sposobem przesyłania zmian do moich lokalnych klonów z naszego centralnego serwera.

Jeśli chodzi o używanie TortoiseHG, będziesz w porządku przy wersji 1.0, ponieważ będzie on tworzył i zarządzał plikiem ".hgsubstate" w zagnieżdżonym repozytorium , o ile już utworzyłeś plik ".hgsub"!

+1

Znacznie łatwiej jest po prostu użyć wiersza poleceń do zatwierdzenia na najwyższym poziomie. Domyślam się, że tortoisehg próbuje popełnić customer1/project1 zamiast customer1 \ project1 (backslash). – adrianm

7

Udało mi się ominąć ten problem, używając polecenia z głównego repo.

hg commit -m 'Updated subrepo' 
4

miałem ten sam problem:

W jednym z moich repozytoriów popełnienia jednego z moich zmienionych modułów subrepo nie powiodła się z komunikatem

"abort: mysubrepo: no match under directory!" 

Powód:

TortoiseHg nie powiedzie się do podfolderu, ponieważ obsługuje nazwy folderów z uwzględnieniem wielkości liter!

Przykład: Oryginalna repozytorium:

C:\Shared\MySubRepo 

Klonowanie to jako subrepo do innego repozytorium poprzez linię poleceń

hg clone C:\shared\mysubrepo <--- Note the lower cases! 

będzie utworzyć folder subrepo mysubrepo wewnątrz repozytorium nadrzędnej. Dodanie go do pliku jak zwykle (zawsze używam niezależnej platformy "/" zamiast "\", więc nie sądzę, że to jest przyczyną błędu). Próba popełnienia z --subrepos TortoiseHG kończy się na "nie pasuje do katalogu!" błąd. Jednak działa z linii poleceń.

Po zmiana nazwy folderu subrepomysubrepo do MySubRepo (w oryginalnym folderze z górnych przypadków) TortoiseHg mógł popełnić pomyślnie!

Może trzeba zmienić nazwę folderu, również w hgrc pliku, ale nie jestem pewien, czy to jest naprawdę neccessary, bo przemianowano ją w pliku przed zastanawianie się, że istnieją różnice canse wrażliwe w nazwie folderu.Również usunięcie repozytorium z rejestru repozytorium TortoiseHg Workbench i odczytanie go może być potrzebne (i/lub ponowne uruchomienie Workbencha).

0

Dodanie moich 2 centów.

miałem ten błąd abort: customer1/project1: no match under directory na Windows w następującym scenariuszu:

  • repo był w folderze o nazwie MyFolder (uwaga na duże litery)
  • repo miał subrepo
  • niektóre pliki (tylko niektóre!) w repozytorium macierzystym zostały zatwierdzone przy użyciu myfolder/filename.ext (zanotuj małe litery)

Wszystko działa dobrze, polecenia działają dobrze, ale Tortoise narzeka.

nazwy plików (znaleźć małe użyciu funkcji hg status --all i jesteś w porządku)

Powiązane problemy