Исходники должны лежать, разумеется, в гит-репозитории с
настроенным бекапом (не исходников, а репозиториев целиком!) Релизы: тут уже как настроить. Промежуточные сборки, как правило, должны лежать на CI/CD-сервере, мб в качестве плюшки во вкладке "выпуски" у gitea/gitlab/github. А "устаканившиеся" версии ПО должны лежать тупо на жестком диске (RAID1, разумеется) на сервере с максимально простым доступом (к примеру по http) и на каком-нибудь физическом носителе. В идеале сама "прошивка" должна содержать сведения "из чего её собрали" для последующего сопоставления исходников и бинарников.
Для средне-долгосрочных бэкапов совершенно неожиданно может подойти DVD. Делаете их с периодичностью раз в неделю-месяц, они 5-10 лет могут даже пролежать и сохранить данные.
По поводу архивации исходников - идея, конечно, благородная, но далеко не всегда осуществимая. Вот есть к примеру у вас линуксожелезка, какие исходники вам нужно сохранять? Ядро, загрузчик, весь юзерспейс. Собирать этот пакет руками - это застрельный вариант, даже в самом занюханном проекте их будет сотни, если не тысячи. А ёкта, к примеру, в src-пакет кладёт только .c/.cpp/.h-файлы, опуская исходники CMake. Ну и зачем вам проект без настроек того, как его собрать?