Создание ветки в Git-копиях ничего .
ОК, это немного преувеличение. Копирует один хэш-идентификатор . То есть предположим, что у вас есть существующее хранилище с N ветвями. Когда вы создаете новую ветку, Git записывает один новый файл с коротким (в настоящее время длиной 40 байт, в конечном итоге длиной 64 байт) идентификатором хэша. Таким образом, если предыдущее использование диска составляло 50 мегабайт, использование нового диска составляет ... 50 мегабайт.
С другой стороны, клонирование хранилище копирует все . Если размер хранилища на сервере S составляет 50 мегабайт, а вы клонируете его на ноутбук L, хранилище на ноутбуке L также составляет 50 мегабайт. 1 Существуют способы уменьшить размер клона (опуская некоторыесовершает), но их следует использовать с осторожностью. В любом случае, в наши дни 50 мегабайт довольно мало. : -)
В работах Git планируется выполнить своего рода клонирование с большей задержкой, когда начальный клон копирует некоторые коммитов и заменяет все остальные с помощью сортировкидолговых расписокЭто еще не готово к производству.
Способ понять все это состоит в том, что Git не заботится ни о файлах , ни о ветвях . Git заботится о коммитах . Коммиты содержат файлы, поэтому вы получаете файлы, когда получаете коммиты, а коммиты идентифицируются непонятными хэш-идентификаторами, поэтому у нас есть имена ветвей, с помощью которых можно найти хеш-идентификаторов. Но это совершает , что имеет значение. Создание нового имени ветви просто сохраняет один существующий идентификатор хеша коммита в новом имени ветви. Стоимость этого составляет крошечный .
1 Это не совсем гарантировано, потому что объекты, хранящиеся в репозиториях Git, "упаковываются". Git будет запускать git gc
, сборщик мусора, время от времени, чтобы собирать и выбрасывать мусор и уменьшать размер хранилища, и в зависимости от того, сколько мусора есть в любом данном хранилище, вы можете увидеть разные размеры.
Были различные ошибки, из-за которых Git не запускался git gc --auto
достаточно часто (в частности, до 2.17 git commit
, пропущенных для запуска auto-gc впоследствии) или из-за которых auto-gc никогда не заканчивал очистку (из-за остатка журнала ошибок от более раннего gc, исправленного в 2.12.2 и 2.13.0). В этих случаях клон может оказаться намного меньше исходного репозитория.