Говорят, что "клон hg" Mercurial очень дешевый ... но на моем жестком диске 400 МБ? (в Mac OS X Snow Leopard) - PullRequest
3 голосов
/ 14 июня 2010

У меня есть проект, который я клонировал по сети на жесткий диск Mac (OS X Snow Leopard).

Проект занимает около 1 ГБ на жестком диске

du -s
2073848 .

, поэтому, когдаЯ hg clone proj proj2

тогда, когда я

MacBook-Pro ~/development $ du -s proj
2073848 proj

MacBook-Pro ~/development $ du -s proj2
894840  proj2

MacBook-Pro ~/development $ du -s
2397928 .

, поэтому клон кажется не таким дешевым ... вероятно, около 400 МБ ... это так?Кроме того, вся папка выросла примерно на 200 МБ, что, кстати, не является общим для proj и proj2 ... Есть ли ссылки, а некоторые не являются ссылками, поэтому перекрытие не учитывается дважды?

Ответы [ 3 ]

3 голосов
/ 14 июня 2010

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

Если вы используете редактор, который может нарушать жесткие ссылки, вы можете cp -al REPO REPOCLONE использовать жесткие ссылки во всем каталоге, включаярабочий каталог, но имейте в виду, что он имеет некоторые оговорки.Цитата из руководства:

Для эффективности жесткие ссылки используются для клонирования, когда источник и место назначения находятся в одной файловой системе (обратите внимание, что это относится только к данным репозитория, а не к рабочему каталогу).Некоторые файловые системы, такие как AFS, неправильно реализуют жесткие ссылки, но не сообщают об ошибках.В этих случаях используйте параметр --pull, чтобы избежать жестких ссылок.

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

$ cp -al REPO REPOCLONE

Это самый быстрый способклонировать, но это не всегда безопасно.Операция не является атомарной (убедитесь, что REPO не был изменен во время операции, зависит от вас), и вы должны убедиться, что ваш редактор нарушает жесткие ссылки (Emacs и большинство инструментов ядра Linux делают это).Кроме того, это несовместимо с некоторыми расширениями, которые размещают свои метаданные в каталоге .hg, например, mq.

2 голосов
/ 15 июня 2010

Дешево не то же самое, что бесплатно.Клонирование создает новый репозиторий, который по своей природе требует затрат места - если вы не хотите, чтобы он находился где-то еще на диске, зачем вам клонировать?Однако это сравнительно дешево, как вы заметили, клонирование репозитория объемом 1 ГБ добавляет всего ~ 200 МБ к месту, занимаемому в родительском каталоге, поскольку Mercurial достаточно умен, чтобы идентифицировать информацию, которую не нужно дублировать.

Я думаю, в целом, вам нужно перестать беспокоиться о тонкостях работы Mercurial (или любой DVCS / VCS).Считается, что использование контроля версий занимает больше дискового пространства и занимает много времени.По мере того, как количество данных и количество изменений увеличивается, увеличивается и пространство и время.Чего вы не понимаете, так это того, что эти затраты значительно перевешивают преимущества контроля версий.Душевное спокойствие в том, что ваша работа безопасна, что вы ничего не можете случайно испортить, и возможность взглянуть на вашу прошлую работу, а также простота ее распространения в случае DVCS намного ценнее.

Если ваши опасения действительно перевешивают эти преимущества, вам следует просто придерживаться простой файловой системы и использовать FTP для обмена / распространения / фиксации исходного кода.

Обновление

Относительно комментария Ромкинса: Вы загружаете большое количество данных.Загрузка большого количества данных занимает время, независимо от того, что это такое.Нет никакого способа обойти этот факт, и Mercurial, ни какая-либо другая VCS не могут заставить его работать быстрее.

Преимущество Mercurial и распределенной модели заключается в том, что вы оплачиваете эту стоимость только один раз.Поскольку вся работа выполняется локально, вы можете фиксировать, возвращать, обновлять и т. Д. Содержимое своего сердца без каких-либо затрат на работу сети и выполнять сетевые операции только для извлечения и передачи изменений, что встречается относительно редко.В централизованной VCS вы вынуждены выполнять сетевые операции в любое время, когда захотите что-то сделать с вашим исходным кодом.

Кроме того, я просто попытался клонировать mozilla-central самостоятельно, чтобы посмотреть, сколько времени это займет, изагрузка наборов изменений и манифестов заняла 5 минут, загрузка фрагментов файла - 20 минут, а затем обновление по умолчанию (не ограниченное сетью) - 10 минут.35 минут, чтобы получить всю кодовую базу для Mozilla вместе со всей историей изменений, не так уж и плохо.И даже в этом крупном проекте с ~ 500 000 файлов и ~ 62 000 изменений хранилище всего на 15% больше рабочего каталога, что возвращает нас к исходному вопросу.

Стоит отметить, что клонированиерепозиторий не лучший способ загрузить исходный код.Если вам нужна только кодовая база, вы можете получить release . Mercurial Web Interface также позволяет просматривать кодовую базу , не загружая ничего, и вы можете скачать полные архивы любой ревизии по ссылкам на архивы (bz2, zip, gz) вверхукаждой страницы.Все эти опции работают быстрее, чем полный клон.Клонирование репозитория необходимо только , если вы хотите активно разрабатывать кодовую базу Mozilla, а не тогда, когда вам нужны только файлы.

0 голосов
/ 14 июня 2010

Когда вы можете получить 1 ТБ дискового пространства за £ 60, 400 МБ - это дешево (~ 2 п.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...