Насколько я знаю, все распределенные системы контроля версий требуют, чтобы вы клонировали весь репозиторий. По этой причине не разумно вкладывать огромное количество контента в один репозиторий (спасибо за этот ответ). Я знаю, что это не ошибка, а функция, но я задаюсь вопросом, является ли это требованием для всех распределенных систем контроля версий.
В распределенных rcs история файла (или фрагмента содержимого) является направленным ациклическим графом, поэтому почему вы не можете просто клонировать эту одну DAG вместо набора всех графиков в репозитории? Возможно, я что-то пропустил, но следующие прецеденты трудно сделать:
- клонировать только часть репозитория
- объединить два репозитория (сохраняя их истории!)
- скопировать некоторые файлы с их историей из одного репозитория в другой
Если я повторно использую код других людей из нескольких проектов, я не могу сохранить их полную историю. По крайней мере, в git я могу думать о (довольно сложном) обходном пути:
- клонировать полный репозиторий
- удалить весь контент, который мне не интересен
- переписать историю, чтобы удалить все, что не находится в главном
- объединить оставшийся репозиторий в существующий репозиторий
Я не знаю, возможно ли это также с Mercurial или Bazaar, но по крайней мере это нелегко. Так есть ли распределенная rcs, которая поддерживает частичный checkout/clone по дизайну? Он должен поддерживать одну простую команду, чтобы получить один файл с его историей из одного репозитория и объединить его в другой. Таким образом, вам не нужно будет думать о том, как структурировать ваш контент в репозитории и подмодули, но вы могли бы с радостью разделить и объединить репозитории по мере необходимости (крайний был бы одним репозиторием для каждого отдельного файла).