Подтвердить что ты не робот

Можно ли сделать частичный клон/ветвь с базаром, ртутным или git?

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

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

Возможно ли это, и если да, как я могу это сделать?

Я все еще решаю, идти ли с базаром или меркуриальным, поэтому ответы на любой из этих вопросов были бы полезными.

Изменить: Собственно, решения для git также будут полезны.

4b9b3361

Ответ 1

Если у вас уже есть репозиторий, и вы хотите сделать это, это будет боль.

Если вы собираетесь делать это с совершенно новыми репозиториями, вы можете посмотреть на Mercurial new subrepos.

В основном вы создаете автономные репозитории для определенных каталогов:

myproject/
    .hg/
    source code/
        ... files here ...
    documentation/ (subrepo)
        .hg/
        ... files here ...
    graphics/ (subrepo)
        .hg/
        ... files here ...

Это изолирует разные части проекта в разных хранилищах. "Содержащее" репо (myproject в этом случае) отслеживает, какая ревизия подчиняется при каждом выполнении. Подредакторная страница subrepo, о которой я говорил, хорошо объясняет.

Ответ 2

Клонирование подмножества дерева невозможно, насколько я знаю, но есть и другие возможности.

Git: команда git clone имеет флаг --depth:

--depth <depth>

Создайте мелкий клон с историей, усеченной до указанного количества ревизий. Неглубокий репозиторий имеет ряд ограничений (вы не можете клонировать или извлекать из него, а также не нажимать и не на него), но он адекватен, если вас интересует только недавняя история крупного проекта с длинной историей, и он захочет отправьте исправления в виде патчей.

Bazaar: флаг --lightweight для команды checkout загружает только рабочий каталог вместо всей истории и сохраняет полосу пропускания и дисковое пространство. Все операции по-прежнему поддерживаются, но для их выполнения требуется сетевое подключение.

Я не знаю, имеет ли эта функция Merurial или нет.

Ответ 3

Судя по этой вики, эта функция еще не реализована в Mercurial, однако есть extension, который может сделать примерно то, что вы хотите, "преобразовывая" репозиторий или его часть, а не фактическое ветвление. Поскольку он может конвертировать из и в Hg, он может работать как частичное клонирование. Это то, что вам нужно?

Ответ 4

В git вы можете использовать git поддерево, которое позволяет извлекать "виртуальный" репозиторий только для определенного подпроекта, затем внесите изменения в подпроект, а затем снова объедините эти изменения.

Ответ 5

В большинстве DCVS это правило "1 проект == 1 репозиторий". Нет понятия "подпроект" (в отличие от Subversion, где вы можете проверить поддерево и работать над этим).

Основная причина заключается в том, что ваш "проект" содержит копию всего репозитория в корневой папке. Все будет довольно сложно, если вы сможете создавать копии всего репозитория в подпапках.

С положительной стороны создание рабочих копий - это быстрая операция (если базовая файловая система не работает).

Ответ 6

Для Bazaar у вас есть вложенные деревья: http://bazaar-vcs.org/NestedTreesDesign, который позволяет разделить большой проект в подпроектах.
Я еще не использовал эту функцию, поэтому не знаю, как хорошо она работает.

Вы также можете использовать ветку с помощью --hardlink, чтобы не копировать кучу файлов (не уверен, работает ли она на Windows...), ветвь без истории (более светлая ветка) или ветка без рабочего дерева (без файлов, только с историей).