Как стать автором
Обновить

Итак, вы думаете, что знаете Git? Часть третья: реально большие репозитории

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров20K
Всего голосов 30: ↑28 и ↓2+36
Комментарии30

Комментарии 30

Вообще, по меркам геймдева, ничего такого в микрософтовых размерах репозитория нет. Ну обычный нормальный репозиторий одной единственной игры. По гигабайтам даже маленький, здесь вполне норма терабайт 2-10.

А вы хотя бы какие-то репозитории видели? И вообще, знаете что такое репозиторий?
Вопросы к чему - хватить нести чушь.

Ничосе вы агрессивный. Ну вот, в данный момент у меня на рабочем компьютере таких три. Что дальше?

Все же это специфика GameDev-репозиториев, поскольку они по своей сути - файловая помойка, уж простите. 300GB c 90-95% программного кода (а не всяких спрайтов и прочего) - это невероятно огромные объемы. И правильно переводить слово huge из оригинальной статьи Скотта Чакона - огромный. То есть это действительно огромный репозиторий. Сравните с другими 10-летними полноценными репозиториями (комментарий ниже с примером Avalonia).

А какой в них размер именно кода? И количество файлов?

Я так полагаю, в геймдеве это огромное пространство занято ресурсами. То есть файлов не так уж много, и они по большей части большие и бинарные, то есть их количество не такое большое, и использовать на них какой-нибудь diff или blame никто не будет.

Соответственно разумнее сравнивать хотя бы количество файлов. Много в каких геймдевных репозиториях наберётся 3,5 миллиона файлов?

@fddima - судя по описанию функции windows - https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-readdirectorychangesw - да, буфер событий может переполниться. Но вызывающий об этом узнает. Видимо, в таком случае fs-monitor пометит состояние как невалидное и при следующем запросе git status честно пройдется по всем файлам.

Ну к примеру размер чекаута ~1Тb, число файлов ~10М. Правда не git а svn. Работает вполне шустро на рядовых операциях. Но конечно некое существенное подмножество фич запрещено - за разумное время они не отработают.

И количество файлов?

1-5млн.

Ну хорошо, судя по прилетевшим минусам я поторопился с выводами, тогда задам такой вопрос - какой процент от этого объема занимают именно текстовые файлы (программный код)? 5% хотя бы будет? Просто стало интересно, что это за магические GameDev репозитории, на терабайты заполненные спрайтами и другими графическими ассетами.
Вот даже интересно стало, условно, я на PS4-ке раньше игрался в souls-like жанр, самые тяжелые из них уже после установки занимают (специально зашел в настройки проверить):

  • Nioh - 55.3GB

  • Nioh2 - 53GB

  • Nier Automata - 52.63GB

  • Ghost of Tsushima - 52.23GB + Bonus Content в 22.10GB

  • God of War - 45.86GB.

  • Elden Ring - 45.69GB

  • Nier Replicant - 27GB

  • Sekiro: Shadows Die Twice - 17.02GB (!)

Вот объясните недалекому, неужели в этих игрушках в репозиториях тоже терабайты ассетов?

Код клиента, код сервера, код инструментария разработки, разнообразный арт (концепты, модели, текстуры, анимации, ...), игровая механика в удобном для редактирования виде и так далее и тому подобное.

Коэффицент размера чекаута к размеру финального продукта запросто может быть 50к1 и выше.

Хм, спасибо. Все равно в голове не укладывается, взять что-то родное из своей экосистемы (.NET), к примеру, Avalonia - кроссплатформенный UI фреймворк для .NET - репозиторию 10 лет, и он не весит даже 200 MB. Так что, пресловутые GameDev-repos, они скорее как файловые хранилища. 300GB чистого исходного кода под операционную систему - это действительно очень много.

Дело в том что это размер финального билда под целевую платформу. Даже если говорить о коде, то он сильно сжимается когда из текста превращается в набор машинных команд. Но если мы об ассетах, то там вообще песня. Все текстуры могут сжиматься под каждую платформу разными алгоритмами. Кто-то закинул 4К текстуру несжатую, которая весит 20 мегабайт. На PS4 это улетело одним алгоритмом сжатия в размере 1К, на PC улетело другим алгоритмом сжатия в 2К. Плюс репозиторий хранит все объекты, а в билд идут используемые. Может быть кто-то передумал на одном из этапов использовать какую-то текстуру, а в истории она осталась навсегда. Или импортировали пакет текстур, а левел-дизайнер использовал только несколько из них

НЛО прилетело и опубликовало эту надпись здесь

Там еще упоминается про 2000 активных коммиттеров и десятки пушей одновременно.

Над каким-нибудь TLoU2 работало 2100 человек. Я вам говорю, ничего особенного в цифрах микрософта нет.

Да я верю :) А чего они его тогда называют the largest on the planet? "Сам себя не похвалишь?.."

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

Подтверждаю, не супер большая игра в репо в разработке, размер 2+ тб, гит не справляется. Ушли на перфорс

А мы пошли путём Git LFS. Не всё идеально, некоторые сценарии использования тяжеловаты (впрочем, и перфорс не идеален), но в целом шевелится.

Тут как-то plastic scm хвалили...

Upd. Поискал, почитал. Он серверной и не в РФ, возможны проблемы.

НЛО прилетело и опубликовало эту надпись здесь

Занятная идея. Сначала запихнуть все исходники в один моно-репозиторий, а потом заморочиться с checkout-ом по частям. Почему бы сразу-то на части не поделить?

Я не знаком с особенностями производства софта в MS, пока мне кажется, что это - инвестиции, доработка git ради более эффективной работы в будущем с чем-то еще, нежели для практической пользы сейчас.

Про развитие Git-LFS нигде ничего не сказано, а работа git с бинарями - это, имхо, его больное место.

Фиг знает, молодцы конечно, но подано это всё немного с преувеличениями. Году в 2013м трогал репозиторий сравнимого размера, на предмет перехода с svn. Размер чекаута основного бранча там был поменьше наверное на порядок, общий размер репы был под 100гб. При грамотной настройке клиентской системы git с полным репозиторием работал довольно шустро, хоть и не без проблем, и какая-то часть разработчиков даже пользовалась git-svn, правда только с нужными ветками и обычно используя sparse checkout. В итоге там решили писать свою систему контроля версий имени этого репозитория :-).

А зачем собственно создавать проблему и потом героически её пытаться решить? Зачем сваливать всё в одну кучу и потом жаловаться что оно работает медленно и много весит?

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

Есть такая стратегия борьбы с конкурентами (Linux, открытое ПО в целом) — слияние с поглощением. GitHub и WSL — звенья одной цепи, я думаю. Если бы Microsoft купила GitHub и убивала бы его, то это очень плохо отразилось бы на репутации, а вот переехать туда с главным продуктом и доделать под свои задачи, поедая кактус, а потом ещё и купить, подарив разработчикам бесплатные приватные репозитории — совсем другая история.

Создавалась эта проблема ещё в Source Depot, когда о такого рода конкуренции речи не шло. А решать её пришлось с Git, чтобы "положительную карму" заработать. И вот не далее как сегодня от линуксоида со стажем в лет 15 прочитал, что, мол, «Лучший Linux — это винда». Приехали :)

Простите, а причем тут конкуренция, поглощения и слияния?

Чтобы заработать себе эти самые репутационные очки и выйти из воды предельно сухими спасителями Git, нужно было именно создать себе кучу проблем в Git, а потом их героически решить, а не обходиться простыми решениями. Зачем? Чтобы пользователи просто «использовали ванильный Git для управления репозиторием в 300 Гб», а не думали про LFS и что куда выпинывать. Такая вот предельная забота о пользователях…

Это больше похоже на какой-то бред. Нельзя решить всё и сразу. Нельзя HDD выдавать десятки тысяч IOPS, равно как нельзя вместить дестяки ТБ на SSD.

Если где-то что-то прибыло -- значит где-то что-то убыло.

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

Вот прям с языка сняли,

  • 3,5 млн файлов (для справки, ядро Linux содержит около 80 тыс. файлов, или 2% от этого количества).

  • Репозиторий на 300 ГБ (против Linux с ядром ~4,5 ГБ).

преподносится автором так, как будто это предмет для гордости.

Самое ценное в статье для меня - выяснил, что Microsoft влил свои изменения в master git и теперь этим могут пользоваться все.

Что касается вопроса - кому это нужно? Как выясняется, нужно монолитам, играм и большим мобильным приложениям. Хотя пример Гугла, Яндекса, Юлы, ... говорит о том, что даже с микросервисной архитектурой люди идут в монорепы для большего контроля над кодом.

Навскидку: https://habr.com/ru/companies/yandex/articles/469021/ и https://habr.com/ru/companies/oleg-bunin/articles/531632/

Но если есть такая возможность - не используйте монорепы. Окей, git допилили под большие объемы. Но еще есть утилиты сборки, CI pipeline, статический анализ кода, IDE. Что-нибудь, да сломается)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории