Подтвердить что ты не робот

DVCS - как часто и когда совершать изменения

Существует еще один поток в StackOverflow, посвященный тому, как часто фиксировать изменения в исходном элементе управления. Я хочу сказать, что в контексте использования DVCS, такого как git или mercurial.

  • Как часто и когда вы совершаете?

  • Вы совершаете изменения только тогда, когда они правильно построить?

  • Как часто и когда вы нажимаете свои изменения (или файл запроса на перенос или аналогичный)?

  • Как вы относитесь к разработке сложной функции/выполнению сложного рефакторинга, требующего многого места для прикосновения? Являются ли "частные коммиты", которые не будут строить нормально? Когда вы закончите, вы нажимаете их также в главный репозиторий или объединяете все свои изменения в один набор изменений перед нажатием?

4b9b3361

Ответ 1

Это зависит от характера ветки ( "линии развития" ), над которой вы работаете.

Основным преимуществом этих DVCS (git или меркуриальных) является то, что вы можете:

  • филиал
  • слияния

Итак:

1/Как часто и когда вы совершаете?
2/Выполняете ли вы только изменения, когда они правильно строятся?

Сколько времени требуется на частной ветке (например, если она компилируется).
Практика только совершать, если модульные тесты проходят, является хорошей, но должна применяться только к "официальному" (как в "может быть опубликована или" нажата ") ветвь: в вашем частном филиале вы объединяете время gazillon, если вы необходимо.
Единственное: выполните некоторое слияние - неактивно, чтобы реорганизовать ваши многочисленные коммиты в вашем частном филиале, прежде чем воспроизводить их в своей основной ветке разработки, где вы можете пройти некоторые тесты.

3/Как часто и когда вы нажимаете свои изменения (или записываете запрос на pull или аналогичный)?

Публикация - это еще одно дело, и ее следует делать с "ясной" историей (согласованные слияния, представляющие контент, который компилирует и передает некоторые тесты).
Филиал, который вы публикуете, должен быть тем, где история никогда не переписывается, всегда обновляется.
Темпы публикаций зависят от характера удаленной отрасли и населения, занимающегося этой отраслью. Например, если это для другой команды, вы можете нажимать довольно часто. Если это для общесистемной группы тестирования интеграции, вы будете делать гораздо реже.

4/Как вы относитесь к разработке сложной функции/выполнению сложного рефакторинга, требующего многого места для прикосновения? Являются ли "частные коммиты", которые не будут строить нормально? Когда вы закончите, вы нажимаете их также в главный репозиторий или объединяете все свои изменения в один набор изменений перед нажатием?

См. пункты 1. и 2.: сначала патч в своем собственном филиале, затем реорганизуйте свои коммиты в официальной (опубликованной) ветке патча. Одна фиксация не всегда является лучшим вариантом, если патч включает несколько разных "действий" (или исправление ошибок).

Ответ 2

Я бы очень часто вносил изменения в свой DVCS (мою собственную тему или ветку задач), поэтому я могу использовать его не только для "доставки изменений", но и для того, чтобы помочь мне, пока я работаю: например, "почему работал 5 минут назад, и он больше не работает?" Если вы выполняете часто, вы можете просто запустить diff.

Кроме того, техника, которую я нашел очень, очень хорошо, использует ее для "самообновления рефакторов". Позвольте мне объяснить: если вы должны сделать большой рефакторинг в ветке темы, а затем просмотреть изменение в целом (изменив хороший набор файлов), вы наверняка потеряете. Но предположим, что вы проверяете каждый "промежуточный шаг" и документируете его с комментарием, затем вы создаете своего рода "фильм" своих собственных изменений, помогающих описать, что вы сделали! Огромный для рецензентов.

Ответ 3

Я совершаю много; при добавлении функций или даже переформатировании моих источников.

Я использую git и выполняю большую часть своей работы над не разделяемыми ветвями. И когда я добавил достаточно мало изменений, которые считаются блоком, я использую git rebase для сбора меньших связанных изменений в более крупные куски и фиксации их для основных ветвей.

Таким образом, у меня есть все преимущества совершенного кода, который я могу отложить назад или вперед, но мне не нужно совершать все мои ошибки и бактраксы в основной истории.

Ответ 4

Как часто и когда вы совершаете?

Очень часто. Это может быть несколько раз в час, если изменения, которые я сделал, работают и составляют хороший патч. Или это может быть каждые несколько часов, в зависимости от того, трачу ли я больше времени на отладку или экспериментирую с рискованными изменениями.

Выполняете ли вы только изменения, когда они правильно строятся?

Да, почти всегда. Я не могу думать о причине, чтобы проверить код, который не строился правильно. Существует множество причин, по которым вы можете проверить код, который работает неправильно (в ветке).

Как часто и когда вы нажимаете свои изменения (или записываете запрос на перенос или аналогичный)?

Обычно только когда функция завершена и готова к тестированию интеграции. Это означает, что он прошел модульные тесты и другие соответствующие тесты, а код/​​патч достаточно чистый, и я считаю его готовым к рассмотрению.

Как вы относитесь к разработке сложной функции/выполнению сложного рефакторинга, требующего многого места для прикосновения? Являются ли "частные коммиты", которые не будут строить нормально? Когда вы закончите, вы нажимаете их также в главный репозиторий или объединяете все свои изменения в один набор изменений перед нажатием?

Я бы создал именованную ветвь для этой функции (которая имела бы прослеживаемость в документах по дизайну и системе отслеживания проблем). Записи, которые не строятся, будут только в порядке на частной ветке в качестве промежуточного шага, но все равно будут исключительными. В настоящее время я не переустанавливаю и не объединяю всю ветвь функций в единый набор изменений, хотя это то, что я смотрю на будущее. Изменения переносятся только при сдаче соответствующих тестов.

Ответ 5

Я следую за этим видом flow
alt text http://img121.imageshack.us/img121/3272/versioncontrolsysbestpr.png

(Вот исходный URL-адрес изображения)

Я думаю, это говорит о многом. В основном я бы выполнил регистрацию после внедрения полной истории использования/истории пользователя (в зависимости от вашего программного процесса). Главное, что вы проверяете вещи, которые работают в том смысле, что они компилируются. Никогда прервать сборку!
Выполнение фиксации после каждого пользовательского рассказа/случая использования имеет то преимущество, что вы лучше отслеживаете прошлые версии и отменять изменения намного проще.