Если вы не думали об этом заранее, это довольно сложно сделать.
Но в будущем вот как вы можете настроить себя для этого:
Получите настоящую систему управления версиями с очень хорошей поддержкой как ветвления, так и слияния. Исторически это означало нечто вроде git или Mercurial, потому что поддержка слияний Subversion была очень слабой. (Однако команда Subversion в последнее время работает над улучшением поддержки слияний.) Что касается Windows, я не знаю, какие инструменты VC лучше всего подходят для чего-то подобного.
Решите, как организовать работу по отдельным функциям. Один из подходов состоит в том, чтобы сохранить каждую функцию в отдельной ветви и объединить ее с основной ветвью только тогда, когда новая функция будет готова. Целью здесь является постоянная отправка основной ветви почти . Это проще всего, когда ветви функций не сидят, собирая пыль - возможно, каждый программист может работать только с 1 или 2 функциями одновременно и объединять их, как только они будут готовы?
Кроме того, вы можете попытаться выбрать отдельные патчи из своей истории контроля версий. Это утомительно и подвержено ошибкам, но это может быть возможно для некоторых очень дисциплинированных групп разработчиков, которые пишут очень чистые патчи, которые делают ровно 1 полное изменение. Вы видите этот тип патча в сообществе ядра Linux. Попробуйте посмотреть некоторые патчи на Linux 2.6 gitweb , чтобы увидеть, как выглядит этот стиль разработки.
Если у вас возникают проблемы с тем, чтобы ваш багажник всегда был «почти готовым к отправке», вы можете прочитать книгу о гибком программировании, например, Объяснение экстремального программирования . Все ветвления и слияния в мире будут бесполезны, если ваш новый код имеет тенденцию быть очень глючным и требует длительных периодов тестирования для обнаружения основных логических ошибок.
Обновление
Как ветви функций работают с непрерывной интеграцией? В общем, я склонен создавать ветви функций после каждой регистрации, как и основная ветвь, и я ожидаю, что разработчики будут более или менее фиксировать свои обязательства. ежедневно. Но что еще более важно, я пытаюсь очень агрессивно объединить ветви функций с основной веткой - ветвь функций 2-недельной давности очень и очень нервирует меня, потому что это означает, что кто-то живет в своем маленьком мире.
Что если клиенту нужны только некоторые из уже работающих функций? Это меня немного беспокоит, и я хотел бы спросить их , почему клиенту нужны только некоторые из функции. Они нервничают по поводу качества кода? Мы строим правильные функции? Если мы работаем над функциями, которые клиент действительно хочет, и если наша основная ветвь всегда стабильна, то клиент должен стремиться получить все, что мы реализовали. Поэтому в этом случае я бы сначала внимательно посмотрел на основные проблемы с нашим процессом и попытался их исправить.
Однако, если бы для этого запроса была какая-то особая причина «один раз в голубую луну», я бы в основном создал новый ствол, заново слил некоторые ветви и выбрал вишни другие патчи. Или отключите некоторые из пользовательского интерфейса, как предлагали другие авторы. Но я бы не стал делать это привычкой.