Jak sklonować podfolder repozytorium w Mercurial?

Mam repozytorium Mercurial zawierające garść powiązanych projektów. Chcę rozgałęzić tylko jeden z tych projektów, aby pracować nad nim gdzie indziej.

Czy klonowanie tylko części repozytorium jest możliwe i czy jest to właściwa droga do osiągnięcia tego celu?

Author: Martin Geisler, 2009-05-28

6 answers

What you want is a wąski lub częściowy klon , ale niestety nie jest to jeszcze obsługiwane.

Jeśli masz już duże repozytorium i zdajesz sobie sprawę, że sensownym byłoby podzielenie go na kilka mniejszych repozytoriów, możesz użyć rozszerzenia convert , aby wykonać konwersję Mercurial do Mercurial. Zauważ, że tworzy to nowe repozytorium foo i nie można naciskać / ciągnąć między your-big-repo A foo.

convert extension nie jest domyślnie włączona, więc dodaj do pliku repo hgrc lub pliku mercurial.ini:

[extensions]
hgext.convert=

Następnie utwórz plik map.txt z

include "libs/foo"
rename "libs/foo" .

(uwaga możesz używać ukośników do przodu nawet w systemie Windows) i uruchom

$ hg convert --filemap map.txt your-big-repo foo

, które uczyni foo repozytorium z pełną historią folderu libs/foo z your-big-repo.

Jeśli chcesz usunąć wszystkie dowody foo z your-big-repo możesz wykonać kolejną konwersję, w której użyjesz exclude libs/foo, aby pozbyć się katalog.

Jeśli masz kilka takich repozytoriów i chcesz ich używać jako całości, powinieneś zajrzeć do podrepozytoriów. Ta funkcja pozwala na włączenie innych repozytoriów do kasy - podobnie jak działa svn:externals. Proszę postępować zgodnie z zaleceniami na tej stronie wiki.

 52
Author: Martin Geisler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 10:10:34

Zamiast częściowego klonowania, możesz użyć Convert Extension , aby podzielić repo na więcej niż jedno repo za pomocą podrzędnego repozytorium.

W szczególności patrz sekcja, Konwersja z Mercurial :

Przydatne jest również filtrowanie repozytoriów Mercurial, aby uzyskać podzbiory istniejącego. Na przykład, aby przekształcić podkatalog subfoo repozytorium foo w repozytorium z własnym życiem (zachowując jego pełną historię), wykonaj "po": {]}

$ echo include subfoo > /tmp/myfilemap
$ echo rename subfoo . >> /tmp/myfilemap
$ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
 11
Author: Nathan Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 10:12:04

Natknąłem się na ten problem i znalazłem jeden sposób, aby to zrobić: Korzystanie z dowiązań symbolicznych (niestety tylko Linux)

Na przykład, jeśli potrzebujesz tylko /project w repozytorium, na komputerze Sklonuj repo w innym folderze, a następnie użyj ln -s /repo/location/ project. Mercurial się tym zajmie

 6
Author: TheLQ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-31 03:29:04

Nie jest to możliwe, hg clone sklonuje całe repozytorium.

Możesz spojrzeć na rozszerzenie sub-repozytorium, które pozwala na umieszczenie repozytoriów w repozytorium, które może odpowiadać Twoim potrzebom.

 3
Author: Romain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-28 11:58:36

(pod koniec 2016) Mainline Mercurial nadal nie obsługuje pakietów dla "wąskich klonów", ale istnieją rozszerzenia innych firm, które rozwiązują problem na różne sposoby.

Jeśli poradzisz sobie tylko z wąskim checkout (aka "sparse checkout" lub "partial checkout by file path"), rozszerzenie Facebook ' a sparse.py z Hg-experimental repozytorium (zajrzyj do katalogu hgext3rd/) może być wykonalne. W tym scenariuszu, nadal klon pełną historię (tak .katalog hg jest nie mniejsze), ale twój katalog roboczy pokazuje/działa tylko na podzbiorze pełnego repozytorium.

Alternatywnie Google stworzyło rozszerzenie NarrowHG, które wąska klonowanie (aka "częściowe klonowanie przez ścieżkę pliku"). Musisz mieć kontrolę nad serwerem, klientem i być skłonnym do korzystania z funkcji eksperymentalnych, ale to naprawdę ogranicza skopiowaną historię klona .hg do podzbioru tego, co było w oryginalnym repozytorium.

 2
Author: Anon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 05:21:40

Jest to proste z rozszerzeniem Convert .

 2
Author: cheenu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-30 10:12:39