Я очень стараюсь, чтобы каждая операция коммита представляла собой одно связное изменение. Иногда это целое исправление ошибки или целая функция, а иногда это небольшой рефакторинг на пути к чему-то большему. Там нет простого способа решить, что подразделение здесь, просто по внутреннему чувству. Я также прошу (прошу!) Моих товарищей по команде сделать то же самое.
Когда все сделано хорошо, вы получаете ряд преимуществ:
- Вы можете написать качественное, подробное описание для изменения.
- Чтение первой строки описания каждого изменения дает вам представление о потоке кода.
- Различия изменений легко читать и понимать.
- Если изменение приводит к ошибке / поломке сборки / другой проблеме, ее легко изолировать, понять и отменить в случае необходимости.
- Если я на полпути к изменению и решу прервать, я не потеряю много.
- Если я не уверен, что делать дальше, я могу потратить несколько минут на каждый из нескольких подходов, а затем выбрать тот, который мне нравится, отбрасывая остальные.
- Мои коллеги забирают большинство моих изменений раньше, что значительно упрощает проблему слияния.
- Когда я чувствую себя застрявшим из-за большой проблемы, я могу сделать несколько небольших шагов, в которых я уверен, проверяя их на ходу, тем самым делая большую проблему немного меньше.
Такая работа может помочь уменьшить потребность в небольших ветвях, поскольку вы делаете небольшой уверенный шаг, проверяете его и фиксируете, а затем повторяете. Я говорил о том, как сделать шаг маленьким и уверенным, но для того, чтобы это сработало, нужно также быстро пройти этап проверки. Наличие сильной батареи быстрых, мелкозернистых юнит-тестов + высокое качество, быстрые тесты приложений являются ключевыми.
Команды, над которыми я работал до проверки кода перед регистрацией; это добавляет задержку, которая мешает моему стилю работы с небольшими шагами. Создание пересмотра кода срочно работает прерывания; как и переключение на парное программирование.
Тем не менее мой мозг, похоже, любит многозадачность. Чтобы это работало, я все еще хочу многократные изменения. Я использовал несколько веток, несколько локальных копий, несколько компьютеров и инструменты, которые делают резервные копии ожидающих изменений . Все они могут работать. (И все они эквивалентны, реализованы по-разному.) Я думаю, что мне больше всего нравится несколько веток, хотя вам нужна система управления исходным кодом, которая хорошо и быстро раскручивает новые ветви, не обременяя сервер. Я слышал, что BitKeeper хорош в этом, но у меня еще не было возможности проверить это.