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

Должны ли проверки быть небольшими шагами или полными функциями?

Два варианта управления версиями, по-видимому, диктуют разные стили проверки.

  • центр распределения: изменения в целом будут отражать полную функцию. В общем, эти проверки будут больше. Этот стиль более удобен для пользователя/поддерживающего.

  • отката в центре внимания: изменения будут индивидуальными небольшими шагами, поэтому история может функционировать как невероятно мощная отмена. В общем, эти проверки будут меньше. Этот стиль более дружественный для разработчиков.

Мне нравится использовать мой контроль версий как действительно мощный откат, пока я ударяю о какой-то упрямый код/​​ошибку. Таким образом, я не боюсь сделать радикальные изменения, чтобы опробовать возможное решение. Однако, похоже, это дает мне фрагментированную историю файлов с большим количеством проверок "хорошо, что не работает".

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

Итак, что делать разработчику? Проверьте маленькие шаги или полные функции?

4b9b3361

Ответ 1

Красота систем DVCS заключается в том, что вы можете иметь оба, потому что в DVCS, в отличие от CVCS, публикация ортогональна фиксации. В CVCS каждая фиксация автоматически публикуется, но в DVCS коммиты публикуются только при нажатии.

Итак, совершите небольшие шаги, но публикуйте только рабочие функции.

Если вас беспокоит загрязнение вашей истории, вы можете переписать ее. Возможно, вы слышали, что история переписывания зла, но это неверно: только переписывание опубликованной истории является злом, но опять же, поскольку публикация и фиксация различны, вы можете переписать свою неопубликованную историю, прежде чем публиковать ее.

Так работает Linux, например. Линус Торвальдс очень обеспокоен тем, что история чиста. В одном из самых ранних сообщений электронной почты о Git он сказал, что опубликованная история должна выглядеть не так, как вы ее на самом деле разработали, но как бы вы ее разработали, если бы вы были всезнающими, могли видеть в будущее и никогда не делали любые ошибки.

Теперь Linux немного особенный: он фиксируется в размере 1 фиксации каждые 11 минут в течение 24 часов в день, 7 дней в неделю, 365 дней в году, включая ночи, выходные, праздничные дни и естественные бедствий. И этот показатель все еще растет. Представьте себе, сколько еще будет совершений, если каждая опечатка и мозговой мозг также приведут к фиксации.

Но сами разработчики в своих частных хранилищах, как правило, часто хотят.

Ответ 2

Итак, что делать разработчику? checkin small steps или полные функции?

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

  • В вашем проекте есть ветки master и release. Каждый разработчик поддерживает собственные ветки разработки, которые они не нажимают.

  • Вы используете развить, чтобы выполнять свою повседневную работу. Здесь присутствуют коммиты размера Bite, представляющие возрастающие успехи в состоянии проекта с течением времени. Вы можете сделать ветки topic - * для работы с более длинными функциями, которые охватывают более нескольких дней или крупные рефакторинги. Вы обязуетесь развивать очень часто, возможно, несколько раз в час. Это похоже на нажатие "Сохранить" в редактируемом документе.

  • Если у вас есть некоторые коммиты, которые подходят для следующей версии, вы объединяете соответствующие коммиты в release. релиз теперь содержит кучу отдельных коммитов, которые выборочно были взяты из ветки develop. Вы совершаете выпуск, когда достигнете хорошей точки остановки. Это обычно несколько раз в день.

  • Когда релиз готов к работе, ваш ведущий разработчик сбрасывает все коммиты с момента последнего слияния до master в одно коммандное слияние, которое появляется на master, Затем вы помечаете это commit идентификатором выпуска (например, v.1.0.4). Это происходит нечасто, возможно, после итерации или каждые несколько недель.

Здесь вы можете получить свой торт и съесть его тоже. Перед выпуском вы можете отменить изменения, которые не должны были произойти, или что вы не хотите входить в релиз, и вы можете делать это по одному. Разработчик удобно! Но пользователи тоже получают то, что хотят: большой, глобальный игрок совершает на мастер, который представляет то, что было изменено с момента последней версии.

Ответ 3

Маленькие шаги. Там причина, по которой он назывался контроль версий, а не управление выпуском:)

Зафиксируйте так часто, как вам нравится. Не сдерживайтесь. Никогда не должно быть негативных последствий для передачи кода в ветке "in progress". Магазины разработки, которые ожидают, обязуются не "ломать сборку", неправильно используют RCS. Аналогично, приписывание любого значения для коммита является опасной политикой, просто потому, что оно противоречит цели контроля версий. Значение вместо этого должно быть приписано тегам, ветвям, клонам, записям или тому, что их RCS называет. Эти вещи имеют метаданные (возможно, минимальные, как имя), предназначенные для передачи цели. Изменения - это просто история того, что вы изменили.

Последнее, что вы хотите сделать, это ввести политику, которая бы запрещала разработчикам выполнять свой код по любой причине.

Ответ 4

Моя рекомендация заключалась бы в создании ветки или даже отдельного хранилища для экспериментов. Затем, как только функция будет завершена, вы можете слить код с ветки обратно в основную часть кода. Надеюсь, это позволит вам получить лучшее из обоих миров.

Ответ 5

Одна вещь, которая мне очень нравится в Git, - это то, что репо в вашем dev. среда - это ВАШ РЕПО. Это копия репозитория-сопровождающего. Вы свободны делать то, что когда-либо захотите в этом репо, и вы не станете галочкой со стороны сопровождающего, если не будете подталкивать сумасшедшие истории.

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

Гибкость чрезвычайно расширяет возможности вашего личного потока работы, а также политики, которые ваши коллеги имеют.

Ответ 6

Маленькие шаги действительно великолепны. Вы всегда можете связать их с более крупными шагами в другом репо. Чтобы сделать обратное, вы должны "переписать историю", которая может быть выполнена в некоторых системах (особенно git), но она не поддерживается так, как вам может понравиться.

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

Наконец, небольшие шаги делают менее вероятными, что у вас будут конфликты, или когда вы это сделаете, они будут меньше.

Я использую небольшие шаги даже при работе в одиночку, на нескольких ветвях.

Резюме: Для ежедневного рабочего процесса небольшие шаги имеют много преимуществ. Если вам нужен рабочий процесс, ориентированный на распределение, создайте репо и ветвь только для распространения, и вы можете настроить свои большие шаги там точно так, как вы хотите.

Ответ 7

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

  • Лучшие оценки развития.
  • Улучшение оценок тестирования.
  • Более быстрое время разработки.
  • Меньше общих ошибок.
  • Меньше связи между модулями.
  • Обнаружение раньше, если мой код непреднамеренно сломал что-то еще.
  • еще много

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

Надеюсь, что это поможет.