Во-первых, Subversion (и все другие в настоящее время) - это не менеджеры контроля исходного кода (я всегда думал, что SCM означает управление конфигурацией программного обеспечения), а системы контроля версий.
Это означает, что они хранят изменения в материалах, которые вы храните в них, это не обязательно должен быть исходный код, это могут быть файлы изображений, растровые ресурсы, файлы конфигурации (текстовые или xml), все виды вещей. Есть только одна причина, почему встроенные двоичные файлы не должны рассматриваться как часть этого списка, и это потому, что вы можете перестроить их.
Однако подумайте, почему вы хотели бы также хранить выпущенные двоичные файлы там.
Во-первых, это система, которая помогает вам, а не рассказывает, как вы должны создавать свои приложения. Заставь компьютер работать на тебя, а не против тебя. Так что, если хранение двоичных файлов занимает много места - у вас есть сотни гигабайт дискового пространства и супер быстрые сети. Теперь нет ничего сложного в том, чтобы хранить там двоичные объекты (тогда как десять лет назад это могло быть проблемой - возможно, поэтому люди считают двоичные объекты в SCM плохой практикой).
Во-вторых, как разработчик, вам может быть удобно использовать систему для перестройки любой версии приложения, но другие, которые могут ее использовать (например, qa, test, support), могут этого не делать. Это означает, что вам понадобится альтернативная система для хранения двоичных файлов, и действительно, у вас уже есть такая система, это ваш SCM! Используйте это.
В-третьих, вы предполагаете, что можете восстановить из исходного кода. Очевидно, вы храните весь исходный код там, но вы не храните компилятор, библиотеки, sdks и все другие зависимые биты, которые требуются. Что происходит, когда кто-то приходит и спрашивает: «Можете ли вы собрать мне версию, которую мы поставили 2 года назад, у клиента есть проблема с этой версией». 2 года - это вечность, есть ли у вас тот же компилятор, который вы использовали тогда? Что происходит, когда вы проверяете весь источник только для того, чтобы обнаружить, что недавно обновленный sdk несовместим с вашим источником и дает сбой с ошибками? Вы стираете свой блок разработки и переустанавливаете все зависимости только для создания этого приложения? Можете ли вы вспомнить, какие были все зависимости?!
Последний пункт - самый важный. Чтобы сэкономить несколько килобайт дискового пространства, вы можете потратить несколько дней, если не недель боли. (И закон Сода также гласит, что любое приложение, которое вам нужно перестроить, будет тем самым, которое требовало самой непонятной, сложной для установки зависимости, от которой вы когда-либо были рады избавиться)
Так что храните двоичные файлы в своем SCM, не беспокойтесь о мелочах.
PS. мы помещаем все двоичные файлы в свои собственные каталоги 'release' для каждого проекта, затем, когда мы хотим обновить машину, мы используем специальный проект 'setup', который состоит только из svn: externals. Вы экспортируете проект установки, и все готово, поскольку он выбирает нужные вещи и помещает их в правильную структуру каталогов.