Как клонировать подпапку репозитория в Mercurial?


У меня есть ртутный репозиторий, содержащий несколько связанных проектов. Я хочу развить только один из этих проектов, чтобы работать над ним в другом месте.

возможно ли клонирование только части репозитория, и это правильный способ достичь этого?

6 60

6 ответов:

что вы хотите-это узкий или частичная клон, но это, к сожалению, пока не поддерживается.

если у вас уже есть большой репозиторий, и вы понимаете, что было бы целесообразно разделить его на несколько меньших репозиториев, то вы можете использовать конвертировать расширение сделать превращение ртути в ртуть. Обратите внимание, что это создает новая хранилище foo и вы не можете нажмите / потяните между your-big-repo и foo.

The convert extension не включен по умолчанию, поэтому добавьте следующее в свой РЕПО или mercurial.ini file:

[extensions]
hgext.convert=

затем создать С

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

(обратите внимание, что вы можете использовать прямые косые черты даже в Windows) и запустить

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

что делать foo репозиторий с полной историей С your-big-repo.

если вы хотите удалить все доказательства foo С your-big-repo вы можете сделать другое преобразование, где вы используете exclude libs/foo чтобы избавиться от каталог.

когда у вас есть несколько репозиториев, как это, и вы хотите использовать их в целом, то вы должны смотреть на subrepositories. Эта функция позволяет включать другие репозитории в проверку-аналогично тому, как svn:externals работа. Пожалуйста, следуйте за рекомендации на странице Вики.

вместо того, чтобы делать частичный клон, вы можете использовать Конвертировать Расширение чтобы разделить ваше РЕПО на несколько репо по суб репозиторию.

в частности, см. раздел преобразование из 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 справится с этим

невозможно, hg clone будет клонировать весь репозиторий.

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

(конец 2016 года) Mainline Mercurial по-прежнему не поддерживает пакет для "узких клонов", но есть сторонние расширения, которые решают проблему по-разному.

Если вы можете справиться только с узкой оформить заказ (он же "разреженная проверка" или "частичная проверка по пути к файлу"), то Facebook

Это прямо вперед с конвертировать расширение.