По поводу первого. Как я понял, вам просто надо выделить общий код в отдельный репозиторий. Далее, для локальных проектов, делать просто
hg pull http://bla.com/main/baseproject
git pull http://bla.com/main/baseproject.git
мержите и работаете дальше.
Вместо полно пути можно использовать алиасы. Есть и в гите, и в
меркурии
Еще один вариант, который лучше -
Subrepository. В каждом проекте есть директория с базовым проектом, и в основном коде проекта вы используете общую кодовую базу (подключаете классы, наследуете от какого-либо базового класса и т.д.).
Выбирайте что больше подходит вам.
По поводу второго вопроса:
Можете тоже отдать на растерзание системе контроля версий, однако мержить будет сложновато, когда изменены строки в обоих репозиториях.
Наилучший вариант, это когда есть три файла:
1. Настройки по-умолчанию в базовом проекте.
2. Файл настроек проекта.
3. Файл настроек разработчика.
По поводу третьего вопроса:
Вам необходимы
миграции БД. Это вообще отдельный механизм который правильно сделать тяжело, а жить без него трудно.