|
Apr. 19th, 2021|11:58 pm |
Про гит (каламбур)*
Известно, что гит по юзабилити - говно редкое.* А документацию писали или полудурки какие-то, или генератор бреда.* Такую простую идею, как content-addressable DAG испоганили. Уж молчу про гитхаб и подобные свинофермы.
Но прошло 15 лет, опенсорщики надрачивали на своих кумиров, корпоративные рабы чувствовали себя более автономными с гитом (читай: менее рабами), и он стал мировым стандартом. Теперь никуда от него не деться. Думаю, лет на 20 мы с ним застряли, минимум.
Посему решил всё же разобраться с этим поделием единственным способом, которым только и можно с гитом разобраться. А именно, - нырнуть в дерьмо и догрести до дна. Иначе и не получится: не заучить n команд (включая т.н. "унитазные"), не пройти туториалы, не прочесть книгу. Всё проверил - не помогает.
Взялся налабать утилиту себе, поставив одновременные задачи: 1. Отзеркалить набор репозиториев с гитхаба себе в директорию. 2. По возможности, вообще, без истории, - кому она нужна, кроме гробокопателей и некрофилов всяких? 3. Обновлять регулярно, чтобы была последняя версия всегда (не всегда она рабочая, однако). 4. Чтобы код можно было читать, билдить, накидывать свои изменения при необходимости и т.д. 5. Не трафик оптимизировать и время, а минимизировать размер и количество файлов в гитовой базе данных. 6. Не трекать чужие ветки, максимум, иметь только свои нетреканные, в т.ч. убивать нах локальный master. 7. Абсолютный порядок: весь мусор из гитовой БД убрать в пизду, в т.ч. пустые поддиректории, рефлог и пр.
Удивительно, что никто из авторов гита и гитхаба не подумал о таком простом юскейсе люркера, который не хочет ни региться нигде, ни "социально" кодить, как они понимают эту "социальность", ни вообще, может, не кодить, а тупо (свежий) код читать или запускать. Конкретно правило 6 может принести море проблем, и если не хочешь сидеть ни на каком локальном брэнче, а только на ремотах, то гит превращается в "безголовую" курицу (самоназвание), на которой уже не поездишь, в отличие от "локальных" брэнчей. (Заметки на полях: тут могла бы быть шутка о двуголовой курице с российского герба, но не будем уподобляться разным садковым).
И вот, потратив примерно месяц фулл-тайма, перелопатив сотни веб-страниц, поставив тысячи экспериментов, разобрался. И налабал свою либу на 20кб (а было бы 100кб, если бы на си каком-нибудь писал), - чтобы отгородиться от гитового дерьма раз и навсегда. А дерьма хватает, git - это хаотично разросшийся bloatware, чем-то напоминающий энтерпрайзное говнецо. Впрочем, полностью отгородиться невозможно, абстракция дырявая и течёт Ниагарским водопадом.
В общем, выделил я 5 уровней отзеркаливания гитхаб репозиториев для разных случаев и выписал апдейт и переходы между соседними: gitless <-> shallow <-> single <-> full <-> mirror
gitless. Вообще без .git-директории. Достаточно для чтения кода и сборки. Для обновления нужно сохранить url и текущий хэш.
shallow. Один коммит в базе. Достаточно, когда своё дописываешь поверх верхнего коммита. При апдейте ребейзить.
single. Нужно, если, например, часто ломают верхний коммит или надо сравнивать версии разные - на single главном брэнче.
full. Если бедлам такой, что, чтобы нормально работать с проектом, нужны все брэнчи и история. Ну, или свой проект. Или чужой, и туда постоянно в апстрим кидать патчи надо. Это уровень типичного клона.
mirror. Тут для любителей в говне мамонта покопаться: можно с гитхаба все PR-рефы качнуть. Полнее дерьма лопата будет, только если .git/ вручную копировать, она-лопата только хуки не включает и ещё чо-то там. Можно и своё дописывать, и даже на "удалённые" брэнчи, которые благодаря рефспеку становятся локальными, и просто гомогенными. Но главное, потом не удалить их случайно, а то отличить чисто своё-добавленное-локальное от ремотного становится не так просто.
Пока разбирался, пришлось даже в исходный код гита заглядывать. Там тоже быдлокодеры какие-то пейсали. Особенно умилительно видеть, как при вызове функций параметры собираются в кучку, передаются как строка, чтобы другая функция их распарсила опять. Это нонсенс!.. Молчу уж про анахронизмы типа багтрекера на мэйл-листах. Такой вот передовой проект.
Короче, построил я себе плотик для навигации по океану дерьма, которое из себя гитхаб и гитлаб представляют. Буду плавать... ходить теперь, под коричневым парусом. Ну, и докопался до дна этой ямы, типа эксперт теперь... в гите. |
|