Używam GIT na Macu. Wystarczająco powiedziane. Mam narzędzia, mam doświadczenie. I chcę go nadal używać. Żadnych wojen tutaj ...
Problem zawsze dotyczy interoperacyjności. Większość ludzi używa SVN, co jest dla mnie świetne. Git SVN działa od razu po wyjęciu z pudełka i jest bezproblemowy. Ludzie mogą nadal szczęśliwie korzystać z SVN, a ja nie tracę przepływu pracy ani narzędzi.
Teraz ... Niektórzy faceci przychodzą razem z Mercurialem. Dobrze dla nich: mają swoje powody. Ale nie mogę znaleźć żadnego gotowego GIT HG. Nie chcę przejść na HG, ale nadal muszę współpracować z ich repozytorium.
Czy ktoś z was zna proste rozwiązanie?
Odpowiedzi:
Aktualizacja od czerwca 2012. Obecnie wydaje się, że istnieją następujące metody interoperacyjności Git / Hg, gdy programista chce pracować ze strony git:
Zainstaluj Mercurial i rozszerzenie hg-git . Możesz zrobić to drugie za pomocą menedżera pakietów lub za pomocą
easy_install hg-git
. Następnie upewnij się, że w twoim ~ / .hgrc znajduje się:Możesz zobaczyć tutaj odniesienia, które mówią o określaniu
bookmarks
rozszerzenia, ale jest ono wbudowane w Mercurial od wersji 1.8. Oto kilka wskazówek dotyczących instalowania hg-git w systemie Windows .Gdy masz już hg-git, możesz używać poleceń mniej więcej takich jak Abderrahim Kitouni powyżej . Ta metoda została jednak udoskonalona i ulepszona od 2009 roku. Istnieje również przyjazne opakowanie: git-hg-again . Wykorzystuje katalog najwyższego poziomu jako katalog roboczy jednocześnie dla Mercurial i Git. Tworzy zakładkę Mercurial, która jest zsynchronizowana z końcem
default
(nienazwanej) gałęzi w repozytorium Mercurial i aktualizuje lokalny oddział Git z tej zakładki.git-remote-hg to inne opakowanie, również oparte na
hg-git
rozszerzeniuMercurial. To dodatkowo wykorzystujegit-remote-helpers
protokoły (stąd jego nazwa). Używa katalogu najwyższego poziomu tylko dla katalogu roboczego Git; utrzymuje swoje repozytorium Mercurial puste. Utrzymuje również drugie puste repozytorium Git, aby synchronizacja między Git i Mercurial była bezpieczniejsza i bardziej idiomatycznie podobna do git.Git-hg skrypt (dawniej utrzymane tutaj ) wykorzystuje inną metodę, opartą na
hg-fast-export
od projektu fast-eksportowej . Podobnie jak w przypadku metody 2, zachowuje to również puste repozytorium Mercurial i dodatkowe puste repozytorium Git.Podczas przeciągania narzędzie to ignoruje zakładki Mercurial i zamiast tego importuje każdą nazwaną gałąź Mercurial do gałęzi Git, a domyślną (nienazwaną) gałąź Mercurial do master.
Niektóre komentarze omawiają to narzędzie jako tylko hg-> git, ale twierdzi, że połączyło się z obsługą git-> hg push w dniu 7 grudnia 2011 r. Jednak, jak wyjaśniam w przeglądzie tych narzędzi , sposób, w jaki to narzędzie próbuje zaimplementować wsparcie push nie wydaje się realne.
Istnieje również inny projekt o nazwie git-remote-hg . W przeciwieństwie do wersji wymienionej powyżej, ta nie opiera się na hg-git, ale zamiast tego uzyskuje bezpośredni dostęp do interfejsu API Mercurial Python. W tej chwili korzystanie z niego wymaga również poprawionej wersji git. Jeszcze tego nie próbowałem.
Wreszcie, Tailor to projekt, który stopniowo konwertuje między różnymi różnymi VCS. Wygląda na to, że rozwój tego nie będzie agresywnie kontynuowany.
Pierwsze trzy z tych podejść wyglądały na wystarczająco lekkie, aby przekonać mnie do zbadania. Musiałem je ulepszyć na kilka sposobów, aby działały w mojej konfiguracji, i widziałem kilka sposobów, aby ulepszyć je dalej, aby je ulepszyć, a następnie ulepszyłem je jeszcze bardziej, aby zachowywały się bardziej do siebie, aby móc ocenić bardziej efektywnie. Potem pomyślałem, że inni też mogą chcieć wprowadzić te poprawki, aby dokonać tej samej oceny. Więc ja się pakiet źródłowy , który pozwoli Ci zainstalować moje wersje każdy z pierwszych trzech narzędzi. Powinien również zadbać o zainstalowanie potrzebnych
hg-fast-export
elementów. (Musisz zainstalowaćhg-git
sam.)Zachęcam do wypróbowania ich i sam zdecyduj, co działa najlepiej. Z przyjemnością dowiem się o przypadkach uszkodzenia tych narzędzi. Spróbuję je zsynchronizować ze zmianami w górę i upewnić się, że autorzy w górę są świadomi poprawek, które moim zdaniem są przydatne.
Jak wspomniałem powyżej, oceniając te narzędzia, doszedłem do wniosku, że
git-hg
jest on użyteczny tylko do pobierania z Mercurial, a nie do pchania.Podobnie, oto kilka przydatnych porównań / instrukcji tłumaczeń między Git i Mercurial, w niektórych przypadkach skierowanych do użytkowników, którzy już znają Git:
źródło
Istnieje nowa git-remote-hg, która zapewnia natywne wsparcie:
Obsługa mostków w Git dla Mercurial i Bazaar
Po prostu skopiuj git-remote-hg do $ PATH, uczyń go wykonywalnym i to wszystko, bez zależności (innych niż Mercurial):
Powinieneś być w stanie pchać i wyciągać z niego, jakby to było rodzime repozytorium Git.
Po przesunięciu nowych gałęzi Git zostaną utworzone dla nich zakładki Mercurial.
Aby uzyskać więcej informacji, zobacz wiki git-remote-hg .
źródło
git-remote-hg
(tzn. Bez.py
przyrostka).#!/usr/bin/env python2
.Powinieneś być w stanie używać hg-git .
edytuj
~/.hgrc
i dodaj:utwórz zakładkę, aby uzyskać
master
:edytuj
.hg/hgrc
w repozytorium i dodaj:teraz możesz utworzyć repozytorium git:
i możesz użyć wynikowego katalogu jako klon git. wyciągnięcie z rtęci byłoby:
i pchanie do rtęci:
(Tak, musisz użyć hg z tym przepływem pracy, ale twoje hakowanie będzie w całości git)
PS Jeśli masz problem z tym przepływem pracy, zgłoś błąd.
źródło
git status
polecenie $ git status fatal: Ta operacja musi zostać uruchomiona w drzewie roboczym To jest po tym, jak wydałemhg gexport
w świeżo sklonowanym repozytorium hg. W jaki sposób można obejść nagie repozytoria? Aktualizacja . Najwyraźniej sugestia Rocka Burta działa. DziękujęMożesz spróbować
hg2git
, który jest skryptem w języku Python i jest częścią szybkiego eksportu, który można znaleźć na stronie http://repo.or.cz/w/fast-export.git .Musisz jednak mieć zainstalowany program Mercurial.
źródło
hg-fast-export
działał dobrzehg-fast-export
skrypt jest wysyłany dohg2git
. Jednak nie prześledziłem tego wszystkiego. Zauważ, że te narzędzia pozwalają tylko na przejście z Hg-> Git, a nie odwrotnie.Ponieważ hg-git jest mostem dwukierunkowym , pozwoli ci również przesuwać zestawy zmian z Git na Mercurial.
źródło
Hg-Git Mercurial Plugin . Sam tego nie próbowałem, ale warto sprawdzić.
źródło
Miałem wielki sukces
git-hg
z https://github.com/cosmin/git-hg (wymaga działa instalacjahg
, zbyt). Obsługuje pobieranie, ciągnięcie iwypychaniei jest dla mnie bardziej stabilny niżhg-git
(podobne funkcje zhg
do git).Zobacz https://github.com/cosmin/git-hg#usage przykłady użycia. Interfejs użytkownika jest bardzo podobny do
git-svn
.git-hg
Wymaga dodatkowej przestrzeni dyskowej dla każdego sklonowanego hg repo. Implementacja wykorzystuje pełny klon rtęciowy, dodatkowy klon git gon i faktyczne repozytorium git. Wymagane miejsce na dysku jest około 3 razy większe niż normalne użycie samego gita. Dodatkowe kopie są przechowywane poniżej.git
katalogu katalogu roboczego (lub lokalizacji wskazanejGIT_DIR
jak zwykle).Wskazówka: Podstawowym problemem, który
git-hg
próbuje rozwiązać to, że nie ma to 1: 1 mapowanie międzygit
ihg
funkcje. Największym problemem jest niedopasowanie impedancji między gałęziami git i gałęziami hg bez nazw oraz gałęziami hg nazwanymi i zakładkami hg (wszystkie te wyglądają bardzo podobnie do gałęzi dlagit
użytkowników). Powiązany problem polega na tymhg
, że próbuje zapisać oryginalną nazwę gałęzi w historii wersji, w przeciwieństwie do git, gdzie nazwa gałęzi jest domyślnie dodawana tylko do szablonu zatwierdzenia.Każde narzędzie, które twierdzi, że tworzy mostek interoperacyjny
git
ihg
powinno wyjaśniać, jak sobie poradzi z tym dopasowaniem impedancji.Następnie możesz zdecydować, czy wybrane rozwiązanie odpowiada Twoim potrzebom.Rozwiązaniem, które
git-hg
wykorzystuje jest odrzucanie wszystkich zakładek hg i konwertowanie nazwanych gałęzi na gałęzie git. Ponadto ustawia gałąź master git na domyślną gałąź bez nazwy hg.źródło
git-hg
jest to opłacalne tylko do ściągania z Hg, a nie do pchania (patrz wyjaśnienie, do którego linkuję w mojej odpowiedzi). Czy udało Ci się znaleźć sposób na skuteczne wykorzystanie go w obu kierunkach? Jeśli chodzi o dodatkową przestrzeń, wszystkie techniki, które znam, obejmują pracę w katalogu + jedna kopia git db / metadanych + jedna kopia hg db / metadanych. Dodanie drugiej kopii git db / metadanych wiąże się z większym wykorzystaniem dysku, tak, ale w porównaniu z tym nie jest tak złe, jak mogłoby się wydawać.git-hg
nie nadaje się to do popychania. Zmodyfikowałem swoją odpowiedź, aby wyjaśnić, żepush
nie jest wystarczająco stabilna.Próbowałem hggit. Działa dla mnie, ponieważ muszę sobie poradzić z pracą git'erów i hg'erów. Jest to szczególnie przydatne w przypadku recenzji.
Drobna kwestia / ostrzeżenie na ten temat:
Próbowałem sklonować stabilne repozytorium jądra systemu Linux za pomocą hg. Te repozytoria są przechowywane w git i zwykle zawierają dużą liczbę plików.
To było bardzo wolne. Zajęło mi 2 dni, aby w pełni sklonować i zaktualizować kopię roboczą.
źródło
hggit
lub jesthg
zbyt wolna, aby można go było zastosować w projektach wielkości jądra?Próbowałem cosmin jest git-Hg i abourget na git-HG-znowu zarówno na Mutt za hg repo , wydaje się, że późniejsze szanuje rzędu scalenia dobrze, były to nieco przypadkowe. Możesz zobaczyć z poniższych zrzutów ekranu.
Wykres historii scalania mutta importowanego przez git-hg cosmina :
Wykres historii scalania mutta importowanego przez git-hg-znowu abourget :
Wykres historii aktualnych wykreślony przez hgk w repozytorium hg mutta:
Jak widać z powyższego, drugi wykres git-hg-abourget ponownie jest bardzo zbliżony do oryginalnego wykresu hgk i faktycznie odzwierciedla prawdziwy przebieg pracy kundla.
Jedną wadą git-hg-ponownie, którą znalazłem, jest to, że nie dodaje on pilota „hg”, a raczej importuje wszystkie referencje jako tagi lokalne, git-hg ma wspaniały pilot „hg” reprezentujący repozytorium hg w górę.
źródło
gitk
) Powinno być w stanie identycznie renderować obie historie. Jedyne, czego oczywiście brakuje, to gałąźhg/stable
w wersji abourget. Wydaje mi się, że jest to sprawa między nazwanymi gałęziami, nienazwanymi gałęziami i zakładkami w Mercurial.Dwukierunkowa synchronizacja hg-git (i git-git, hg-hg) jest również możliwa dzięki usłudze Mirror Git-hg . Używa hg-git (między innymi) za kulisami, a jego kod jest również open source.
Oświadczenie : Jestem z firmy stojącej za tym.
źródło