Можно еще весь код писать одной функцией, которая будет сразу делать всё что нужно под любым окружением и на любом железе с любыми драйверами (даже на том, которое будет выпущено в будущем). Вопрос изоляции в этом случае легко решается областью видимости и ИФами.
А еще можно версии хранить в папочках или в архивах. Проблема хранения файлов и кода ведь решается на уровне ОС, с какого перепугу эту проблему должен решать другой код.
А доставлять этот код заказчику можно просто зип-архивом через Скайп, всем известный файлообменник популярный в 2000-х.
Можно еще весь код писать одной функцией, которая будет сразу делать всё что нужно под любым окружением и на любом железе с любыми драйверами (даже на том, которое будет выпущено в будущем). Вопрос изоляции в этом случае легко решается областью видимости и ИФами.
А еще можно версии хранить в папочках или в архивах. Проблема хранения файлов и кода ведь решается на уровне ОС, с какого перепугу эту проблему должен решать другой код.
А доставлять этот код заказчику можно просто зип-архивом через Скайп, всем известный файлообменник популярный в 2000-х.