Как мне клонировать подпапку репозитория в Mercurial?
У меня есть репозиторий Mercurial, содержащий несколько связанных проектов. Я хочу разветвлять только один из этих проектов, чтобы работать над ним в другом месте.
Возможно ли клонирование только части хранилища, и это правильный путь для достижения этого?
6 ответов
Вам нужен узкий или частичный клон, но это, к сожалению, пока не поддерживается.
Если у вас уже есть большой репозиторий и вы понимаете, что имеет смысл разделить его на несколько небольших репозиториев, то вы можете использовать расширение convert для преобразования Mercurial в Mercurial. Обратите внимание, что это создает новый репозиторий foo
и вы не можете толкать / тянуть между your-big-repo
а также foo
,
convert extension
по умолчанию не включен, поэтому добавьте следующее в репозиторий hgrc
файл или ваш mercurial.ini
файл:
[extensions]
hgext.convert=
Затем создайте map.txt
файл с
include "libs/foo"
rename "libs/foo" .
(обратите внимание, вы можете использовать косую черту даже в Windows) и запустить
$ hg convert --filemap map.txt your-big-repo foo
Что сделаю foo
хранилище с полной историей libs/foo
папка из your-big-repo
,
Если вы хотите удалить все доказательства foo
от your-big-repo
Вы можете сделать другое преобразование, где вы используете exclude libs/foo
избавиться от каталога.
Если у вас есть несколько таких репозиториев, и вы хотите использовать их в целом, тогда вам следует взглянуть на суб- репозитории. Эта функция позволяет вам включать в репозиторий другие хранилища - так же, как svn:externals
Работа. Пожалуйста, следуйте рекомендациям на этой вики-странице.
Вместо частичного клонирования вы можете использовать Преобразование Расширения, чтобы разделить ваше репо на несколько репо по подпозиторию.
В частности, см. Раздел " Преобразование из Mercurial":
Также полезно фильтровать репозитории Mercurial для получения подмножеств существующего. Например, чтобы преобразовать подкаталог subfoo из репозитория foo в репозиторий со своей собственной жизнью (при сохранении его полной истории), выполните следующие действия:
$ echo include subfoo > /tmp/myfilemap $ echo rename subfoo . >> /tmp/myfilemap $ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
Я наткнулся на эту проблему и нашел один способ сделать это: Использование символических ссылок (только для Linux, к сожалению)
Например, если вам нужно только /project
в репозитории, на вашем компьютере клонируйте репо в другую папку, затем используйте ln -s /repo/location/ project
, Mercurial справится с этим
(Конец 2016 г.) Mainline Mercurial до сих пор не поддерживает пакет для "узких клонов", но существуют сторонние расширения, которые по-разному решают проблему.
Если вы можете справиться только с узким оформлением заказа (так называемое "разреженное оформление" или "частичное оформление заказа по пути к файлу"), тогда Facebook sparse.py
расширение из репозитория hg-экспериментальный (заглянуть внутрь hgext3rd/
каталог) может быть работоспособным. В этом сценарии вы все еще клонируете полную историю (таким образом, каталог.hg не меньше), но ваш рабочий каталог показывает / действует только для подмножества полного репозитория.
В качестве альтернативы Google создал расширение NarrowHG, которое выполняет узкое клонирование (так называемое "частичное клонирование по пути к файлу"). Вам нужно будет управлять сервером, клиентом и быть готовым использовать экспериментальные функции, но это действительно ограничивает скопированную историю клона в.hg до подмножества того, что было в исходном репозитории.
Это невозможно, hg clone
будет клонировать весь репозиторий.
Вы можете взглянуть на расширение под-репозитория, которое позволяет вам иметь репозитории внутри репозитория, которые могут соответствовать вашим потребностям.