Jak mogę dodać zdalne repozytoria w Mercurial?

99

Pracuję z repozytoriami Git w następujący sposób:

  • Mam główne repozytorium i kilka pilotów na różnych maszynach produkcyjnych.
  • Wysyłam kod produkcyjny do pilotów i ponownie uruchamiam usługi, aby zmiany odniosły skutek.

Mam zamiar przejść z Git na Mercurial i chciałbym wiedzieć z wyprzedzeniem, jak mogę osiągnąć coś takiego.

topless
źródło

Odpowiedzi:

130

Dodajesz wpisy do [paths]sekcji .hg/hgrcpliku lokalnego klona . Oto przykład sekcji, która zostanie umieszczona w .hg/hgrcpliku:

[paths]
remote1 = http://path/to/remote1
remote2 = http://path/to/remote2

Następnie możesz użyć poleceń, takich jak hg push remote1wysyłanie zestawów zmian do tego repozytorium. Jeśli chcesz, aby zdalne repozytorium zaktualizowało się w katalogu roboczym, musisz umieścić changegrouphak w tej zdalnej lokalizacji, która dokonuje aktualizacji. To wyglądałoby mniej więcej tak:

[hooks]
changegroup = hg update 2>&1 > /dev/null && path/to/script/restart-server.sh

Nie każdy jest wielkim fanem tego, że zdalne repozytoria automatycznie aktualizują swoje katalogi robocze w trybie push, a na pewno nie jest to ustawienie domyślne.

Ry4an Brase
źródło
23
Dla każdego, kto chce tylko zobaczyć użycie pilotów, hg pathsktóre jest równoważne git remote -v.
Keyo
5
default-push (zamiast na przykład remote1) umożliwia po prostu wpisanie „hg push”. Następnie używane jest repozytorium default-push. Bardzo pomocne.
Christian
6
@Christian default-pushjest potrzebny / przydatny tylko wtedy, gdy Twój zwykły cel wypychania różni się od zwykłego źródła ściągania. Jeśli są takie same (lub nigdy nie ciągniesz), defaultwystarczy.
Ry4an Brase
2
Żeby dodać jeszcze więcej na ten temat: jeśli masz oba pliki default-pushi defaultw swoim pliku konfiguracyjnym, to pierwsza będzie używana do wypychania, a druga do ściągania. Jeśli chcesz wypychać i wyciągać z tego samego zdalnego repozytorium (co prawdopodobnie robisz, jeśli używasz Mercurial w sposób podobny do scentralizowanego), umieść tylko defaultplik. Byłoby fajnie, gdyby dodali małą opcję wiersza poleceń, aby zrobić to za pierwszym naciśnięciem ... (a może jestem za bardzo osobą CVS ;-))
tiktak
Mam Mercurial v2.6.2 zainstalowany na moim Macu, a plik do ustawiania ścieżek znajduje się w .hg/hgrc(brak DOT przed nazwą pliku).
Regis Zaleman,
9

jeśli chcesz dodać domyślną ścieżkę, musisz popracować defaultw swoim ~project/.hg/hgrcpliku. Następująco:

[paths]
default = https://path/to/your/repo

Powodzenia.

Akash
źródło
5

Możesz rzucić okiem na wtyczkę hg-git GitHub :

Ogólna idea hg-git

dodanie możliwości wypychania i pobierania z repozytorium serwera Git z Mercurial.
Oznacza to, że możesz współpracować przy projektach opartych na Git od Mercurial lub używać serwera Git jako punktu współpracy dla zespołu z programistami korzystającymi zarówno z Git, jak i Mercurial.

Uwaga: nie testowałem tego narzędzia z najnowszymi wersjami Mercurial.

VonC
źródło
1
Mam możliwość przeniesienia wszystkiego na Mercurial, chciałbym używać tylko jednego narzędzia do zarządzania źródłami. Konwertuj, gdy repozytorium zbuduje odpowiednie struktury, a następnie tylko komendy mercurial do produkcji. Mam świadomość, że zarówno git, jak i mercurial mogą współpracować, ale nigdy tego nie próbowałem.
topless
2
^ Chris: tak jest Twoje pytanie: jak przekonwertować repozytoria Git na repozytoria Mercurial? ”Lub„ jak zadeklarować / skonfigurować zdalne repozytorium Hg? ”(Jak w superuser.com/questions/43686/… ) lub„ gdzie pilot jest zadeklarowany w Hg? ”( crazythinking.wordpress.com/2009/03/07/… )
VonC
0

Jeśli korzystasz z systemu Unix i masz zainstalowany Git, możesz użyć tej funkcji bash, aby łatwo dodać ścieżkę do pilotów bez edytora tekstu:

add-hg-path() {
    git config -f $(hg root)/.hg/hgrc --add paths.$1 $2
    awk '{$1=$1}1' $(hg root)/.hg/hgrc > /tmp/hgrc.tmp
    mv /tmp/hgrc.tmp $(hg root)/.hg/hgrc
}

Następnie wywołaj go za pomocą:

$ add-hg-path remote1 https://path.to/remote1

Jeśli ktoś chciałby zbudować odpowiednik Powershell, chciałbym to również dołączyć. Inne potencjalne ulepszenia obejmują sprawdzanie błędów parametrów i uwzględnianie wywołań $(hg root).

Jason R. Coombs
źródło