В качестве принципа контроля версий в репозитории должны храниться только «первичные объекты», а не «производные объекты».
Из этого правила есть исключения: а именно, когда есть пользователи репозитория, которым требуются производные объекты, и разумно ожидать, что у них не будет необходимых инструментов для их генерации. Другие соображения весят, как количество материала громоздко? (Будет ли лучше, если бы у всех пользователей были инструменты?)
Экстремальным примером этого является проект, который реализует редкий язык программирования, компилятор которого написан на этом языке (хорошо известные примеры включают Ocaml или Haskell). Если в репозитории находится только исходный код компилятора, никто не сможет его собрать; у них нет скомпилированной версии компилятора, которую они могли бы запустить на виртуальной машине, чтобы они могли скомпилировать исходный код этого компилятора. Более того, последние возможности языка сразу же используются в самом исходном коде компилятора, так что для его сборки всегда требуется близкий к последней версии компилятор: исполняемый файл компилятора месяца, полученный отдельно, не будет компилировать текущий код, потому что код использует языковые функции, которых не было месяц назад. В этой ситуации скомпилированная версия компилятора почти наверняка должна быть проверена в хранилище и обновлена.