2009-11-11 10 views
17

Próbuję skonfigurować Mercurial do użycia zarówno z serwerem Windows (freeSSHd) jak i klientem (zarówno z linii poleceń, jak i TortoiseHG). Używam najnowszych wersji wszystkiego ... wszystkich pobranych w ciągu ostatnich kilku dni. Używając klucza publicznego auth, udało mi się połączyć z serwerem i jestem w stanie użyć pukla do wykonania "wersji hg" i uzyskać odpowiedź, ale kiedy próbuję sklonować repozytorium z serwera ssh, polecenie wydaje się powiesić. Działa z opcjami -v:Rtęć przez klienta i serwer ssh na Windows

hg -v clone ssh://<username>@<server>//hg/repositoryA testRepositoryA 
running "plink.exe -i "<path to private key file>" <username>@<server> "hg -R /hg/repositoryA serve --stdio"" 

bez niczego więcej. Uruchomienie polecenia hg serve bezpośrednio na serwerze daje pozornie responsywny serwer Mercurial, ale klienci nie wydają żadnych dalszych żądań.

Uruchamianie "hg serve" w katalogu repozytorium i klonowanie przez http działa perfekcyjnie.

Czego powinienem szukać, aby pomóc w debugowaniu tego? Czy jest coś, czego klienci (hg i TortoiseHG) nie wysyłają, aby kontynuować strumień żądań?

Informacje dodatkowe: Dodatkowe informacje: Jeśli zmienię na nieprawidłowe repozytorium na komputerze docelowym, zostanie wyświetlony odpowiedni błąd, więc wydaje się, że zdalny hg jest uruchomiony i poprawnie ocenia ścieżkę.

Biegając z --debug i --traceback skutkuje:

sending hello command 
sending between command 

Wisi tu, dopóki nie CTRL-C

Traceback (most recent call last): 
    File "mercurial\dispatch.pyo", line 46, in _runcatch 
    File "mercurial\dispatch.pyo", line 452, in _dispatch 
    File "mercurial\dispatch.pyo", line 320, in runcommand 
    File "mercurial\dispatch.pyo", line 504, in _runcommand 
    File "mercurial\dispatch.pyo", line 457, in checkargs 
    File "mercurial\dispatch.pyo", line 451, in <lambda> 
    File "mercurial\util.pyo", line 402, in check 
    File "mercurial\commands.pyo", line 636, in clone 
    File "mercurial\hg.pyo", line 187, in clone 
    File "mercurial\hg.pyo", line 63, in repository 
    File "mercurial\sshrepo.pyo", line 51, in __init__ 
    File "mercurial\sshrepo.pyo", line 73, in validate_repo 
KeyboardInterrupt 
interrupted! 

Odpowiadając Ryan: Nie wydaje się być dowolny Wykorzystanie procesora lub zwiększenie wykorzystania pamięci na serwerze. Wygląda na to, że czeka na klienta, aby wysłać żądanie lub coś podobnego.

11/19/2009: Więcej informacji: Problem jest zdecydowanie po stronie FreeSSHd/serwer równania. Połączenie z bitbucketem przez ssh z tym samym zestawem kluczy działa dobrze. Nadal nad tym pracuję.

+1

Spróbuj uruchomić 'hg clone' z '--debug' i opcji "--traceback.To może dać ci więcej wskazówek na temat przyczyny problemu. –

+0

Hrm, czy jest jakiś procesor w procesie rtęciowym po stronie klienta lub serwera? Dowolny ruch sieciowy w interfejsie? (Tylko przeszywający w ciemności ...) –

+0

Miałem te same problemy ... upewnij się, że serwerowa wersja mercurial jest aktualna. – nlucaroni

Odpowiedz

3

Rozwiązaniem, które działało, było wyłączenie opcji "Użyj nowej konsoli konsoli", która znajduje się na karcie SSH. Kolejną rzeczą jest ścieżka. ssh: // ssh_user @ SSH_Server_Address: SSH_Port/Win_Drive_Letter:/Path_To_HG_Repository

Konkretny przykład:

ssh: //[email protected]: 5522/D:/Repository/MyProyect/trunk

Obecnie używam MercurialHG, a nie CLI. Mam nadzieję, że ta pomoc

JQ

Rozwiązanie rzeczywiście mam go od here

+0

Nie używanie "nowego silnika konsoli" pozwoliło mi sklonować zdalne repozytorium, ale proces hg wciąż zawiesza się na serwerze Windows i tylko po zabiciu ręcznie kończy się strona klienta. –

+0

To samo dotyczy pull/push. Jeśli spróbuję zakończyć stronę klienta przez Ctrl-C, to nic się nie dzieje, ale po zabiciu strony serwera procesu hg, dane wyjściowe po stronie klienta zawierają: Exception KeyboardInterrupt: KeyboardInterrupt() w > zignorowany. Przez TortoiseHG jest tak samo, TortoisePlink wisi, ale jeśli ten proces zostanie zabity, proces serwera hg również umiera. –

+0

Dokładnie ten sam problem opisano w http://selenic.com/pipermail/mercurial/2008-July/020382.html –

0

Być może jest tak, że "hg" nie znajduje się na ścieżce. Możesz zobaczyć z linii poleceń, która jest wywoływana, że ​​"hg" jest uruchamiany jako "hg", co oznacza, że ​​musi znajdować się na ścieżce serwera. Spróbuj użyć opcji --remotecmd do sklonowania, aby podać pełną ścieżkę do pliku wykonywalnego hg na serwerze (powodzenia, gdy okna cytują w prawo).

Możliwe, że Twój test z linkiem hg version zadziała, ponieważ został uruchomiony jako interaktywna powłoka, która dostaje inną ścieżkę - co najmniej często przeszkadza ludziom w systemie UNIX.

+0

Zmieniając na niepoprawną ścieżkę do repozytorium, mogę uzyskać błąd, więc jestem prawie pewien, że hg jest poprawnie wywoływany i znajduje się na ścieżce. Powyżej podałem także dane wyjściowe z --debug i --traceback. –

+0

Tak, brzmi dobrze. Usuwam tę odpowiedź, gdy ktoś to wymyśli. –

2

Mam teraz te same objawy, chociaż hg był nieco bardziej przydatny po Ctrl + C - najwyraźniej czekanie, aż zacznę mówić y/n, aby "zapisać serwer do pamięci podręcznej". Niestety hg nie mógł przejść mój T/N do niego interaktywnie (nie mów mi, że Plink wydrukowany coś ważnego ...)

Rozwiązanie:

  1. Plink do hosta raz i zapisać informacje do pamięci podręcznej serwera
  2. dodać -batch do linii poleceń, tak aby następnym razem tak się stało, zamiast tego przerywa.

Dodaję też mój klucz do konkursów, więc nie muszę wpisywać hasła nigdzie indziej.

Kompletna przykładem .hgrc pliku (Win + R, notepad %USERPROFILE%\.hgrc):

[ui] 
ssh=C:\Path\To\plink.exe -C -batch -ssh -i C:\Path\To\My\putty-private-ssh-key.ppk 
+0

Dla mnie -batch nie rozwiązało problemu. Udało mi się wcześniej uzyskać certyfikaty do pamięci podręcznej. Muszę znaleźć więcej czasu, żeby się w to zagłębić, ale wygląda na to, że hg po prostu nie wydaje poleceń od klienta, aby zacząć pracę. –

+0

Najlepsza odpowiedź. Dziękuję Ci! – mpen

1

Innym rozwiązaniem byłoby spróbować wersji Cygwin Hg i ssh. Możesz rejestrować problemy SSH w tej wersji za pomocą opcji -e; na przykład hg clone -e 'ssh -vvv' ssh: // you @ server/repo ...

1

Wpadłem na ten sam problem. Nie wiem, jak to się ma do twojej, ale to właśnie dla mnie zadziałało. Najpierw wyjaśnię moją konfigurację. Mam repozytorium na mojej witrynie na żywo mysite.com Mam lokalne repozytorium na moim lokalnym komputerze w folderze mysite.com Mam inne repozytoria, więc dodaję ustawienia [ui] do pliku /.hg/.hgrc każdy folder repozytorium na moim komputerze lokalnym zamiast pliku Mercurial.ini.

Po pierwsze, jeśli już podłączyłeś się przez Putty, zapisz sesję, ponieważ Plink może korzystać z zapisanych sesji. Użyj Pageant i dodaj swój klucz. Spróbuj uruchomić połączenie z wiersza poleceń, aby połączyć się przy użyciu zapisanej sesji. Na przykład zapisałem moją sesję jako "mysite" w Putty.

C:\>plink mysite 
    Using username "mysite". 
    Last login: Fri Feb 26 21:16:05 2010 from ca-xxx-xx-x-xxx.sta.host.net 
    ←]0;[email protected]:~[[email protected] ~]$ 

Jeśli to działa, spróbuj wykonać następujące czynności w pliku .hgrc

[path] 
default = ssh://[email protected] 
[ui] 
username = RB <[email protected]> 
ssh=plink.exe -ssh -i mysite 

Plink jest ustawiony na mojej drodze, a ponieważ sesja mojawitryna został już zapisany w Putty, wie, czego szukać dla.

starałem się zrobić pull, więc byłem testowania przy użyciu:

hg pull --debug --traceback 

nadzieję, że pomoże.

Edycja: Przepraszam, widziałem za późno, używałeś tortoiseHG zamiast kitu. Mam nadzieję, że i tak to pomoże.

1

W moim przypadku mogłem połączyć się z serwerem raz, ale za drugim razem nie udało się.

Mam tę samą konfigurację i działało idealnie ... ale tylko raz. W moich zapisanych sesjach nie ma nic.

[ui] 
ssh=C:\Path\To\plink.exe -C -batch -ssh -i C:\Path\To\My\putty-private-ssh-key.ppk 
Powiązane problemy