Как мне клонировать подпапку репозитория в 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 будет клонировать весь репозиторий.

Вы можете взглянуть на расширение под-репозитория, которое позволяет вам иметь репозитории внутри репозитория, которые могут соответствовать вашим потребностям.

Это прямо с расширением Convert.

Другие вопросы по тегам