Если вы улучшите качество кода во время работы над функциональной ветвью

11

Мне действительно нравится эта статья о том, чтобы оставить сайт с кодом / лагере в более хорошем состоянии, чем вы его нашли - в реальном мире кажется практичным подходом поддерживать чистоту кода.

Мне также очень нравятся ветки функций как способ разработки функций в отдельности, так что, если вам это не нравится, вы можете легко не объединять их и т. Д.

Однако, если я работаю над функциональной веткой и обнаруживаю некрасивый код, я должен это исправить?

Такое ощущение, что есть несколько недостатков, чтобы исправить это:

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

С другой стороны, если я не сделаю это, пока я нахожусь в файле, то, очевидно, я забуду сделать это через пару дней, когда я объединю ветку.

Меня предупредили, что это основано на мнении (я думаю, что это не входит в название should), но я чувствую, что ответ есть (конечно, люди используют оба этих подхода, поэтому у них должен быть ответ). Кроме того, вопросы development methodologiesпо теме, и я думаю, что они требуют определенного мнения.

Т. Кили
источник
@gnat Полезное чтение, спасибо. Я не думаю, что это довольно глупо, поскольку речь идет о ветвях, которые имеют большой оборот во времени. Я спрашиваю, в частности, о том, как согласовать подход хорошего туриста к рефакторингу с функциональной веткой dev.
Т. Кили
Это зависит от стадии разработки, в которой находится проект. Если проект прошел достаточное количество испытаний и был представлен, то я думаю, что очень рискованно изменять что-либо, что не является частью того, что было предназначено для исправления. Многие люди вставили ошибки, меняющие вещи, которые не должны были повлиять на что-либо. Если проект находится в стадии разработки, то чем чище код для запуска, тем лучше, поэтому, возможно, я бы очистил весь файл в случае необходимости.
Данк

Ответы:

8

Вы должны «исправлять» код в ветви функции, если вы все равно изменяете этот фрагмент кода как часть функции.

Например. Я работаю над функцией «печатать кроликов» и нахожу код принтера

Public class Printer(string type)
{
    If(type=="bunnies")
    {
        //print a bunny
    }
.....
}

Я изменяю это на:

Public class Printer(string type)
{
     PrintFunctionDictionary[type].Print();
}

Зачем:

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

Я не случайно выбираю какую-то другую часть базы кода и «делаю ее лучше», как это будет:

  • Столкновение с людьми, работающими над другими функциями.
  • Используйте время, которое должно быть выделено на разработку функции.
  • Добавьте произвольный код в ветку, которая, если функция не завершена, не может быть объединена с основным продуктом. Точно так же, если я откатю функцию, я потеряю рефакторинг.
Ewan
источник
1
Я согласен, что это хорошая вещь, чтобы попробовать, и в идеальном мире это всегда будет работать. Однако в реальном коде ситуации часто бывают более сложными - при работе с функцией обычно можно найти части кода, которые могут быть реорганизованы независимо от функции. Этот код может мешать реализации функции, но не ограничиваться методами или классами, имеющими прямое отношение к функции. И изменение не обязательно беспокоит других.
Док Браун
1
ну, вы всегда можете сделать отдельную ветку рефакторинга. Как я вижу, хотя ветви функций - это, в основном, функция управления проектами, которая позволяет вам «функция X еще не закончена, но мы можем выпустить ее вместе со всеми остальными» и «функция X выпущена», поэтому мы не ожидаем, что функция Y изменится. Добавив рефакторинг к функции, вы можете нарушить эти преимущества
Ewan
5

Если вы хотите, чтобы ваши рефакторинги «жили независимо» от текущей ветки функций, не вносите в них изменения. Вместо этого выполните рефакторинг в основной ветке разработки (или «ветке рефакторинга», если в вашей команде принято не применять изменения непосредственно к ветке dev). Таким образом, любой из вашей команды (включая вас) может объединить изменения в ветки активных функций, над которыми он работает. Однако будьте осторожны, чтобы не применять какие-либо глобальные рефакторинги во всей «половине кодовой базы», ​​не спросив сначала у ваших коллег разрешения - они могут быть не очень рады, если ваши рефакторинги слишком сильно мешают их текущей работе.

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

Док Браун
источник
3

Цель branchтипов состоит в том, чтобы обеспечить намерение обращаться с ними. Если вы придерживаетесь стиля ветвления в GitFlow, то, скорее всего, у вас есть такие типы, как feature, hotfixи releaseт. Д. В случае ветки объектов ее намерением является инкапсуляция слияния в другую ветвь (т.е. develop), которая показывает разработчика, ответственного за Слияние, что это за функция. Если код, который вы очищаете, не является частью этой функции, не меняйте его.

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

Вот довольно хорошее объяснение различных стратегий: https://www.atlassian.com/git/tutorials/comparing-workflows/

TomSchober
источник
0

если я работаю над веткой функций и обнаруживаю некрасивый код, я должен это исправить?

Вероятно, можно исправить «некрасивый код» на месте, в зависимости от темпа проекта, «уродливости» кода и т. Д., Но старайтесь не делать этого в самой ветви функций.

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

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

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