Приватная предыстория разработки в публичном репозитории
t.me/oficsu_blog/21Задача: нужно заопенсорсить локально разрабатываемый проект
Препятствие: локальная история содержит грязь, да и вообще потенциально опасные вещи вроде приватных ключей, которые затруднительно выискивать в истории, чтобы подчистить
Очевидное решение? Сквошим все коммиты в один, например так: git reset "$(git commit-tree "HEAD^{tree}" -m "initial commit")". Затем пушим результат в новый публичный репозиторий, забываем старую историю как страшный сон, и продолжаем вести разработку, отсчитывая историю уже с нового коммита
Проблема: а что если мы не хотим забывать старую историю? Что, если нам всё ещё полезна полная история разработки, и мы иногда хотим локально заглядывать в git blame или git log -p (но ни в коем случае не пушить)? Неужели придётся каждый раз обращаться к старой ветке явно, чтобы посмотреть, что было до нашего релиза в публичную репу? Или вообще ребейзить её? Куча скучной нудной унылой повторяющейся работы каждый раз?
Менее очевидное решение.…
Алексей Шипилёв — Shenandoah: сборщик мусора, который смог
www.youtube.com/watch?v=CnRtbtis79UThe Green Tea Garbage Collector - The Go Programming Language
go.dev/blog/greenteagcGo 1.25 includes a new experimental garbage collector, Green Tea.
The key idea behind Green Tea is astonishingly simple:
Work with pages, not objects.