Как внедрить хорошие / лучшие методы контроля исходного кода?


28

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

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

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

Мой вопрос:
я здесь далеко от базы или я смотрю не на ту проблему? Кажется, что я что-то упускаю, и я думаю, что спрашиваю не то, что смотрю на инструменты, чтобы решить мою проблему.

Должен ли я искать инструмент для решения этой проблемы или что я должен сделать, чтобы это исправить?


Разве неприятности, с которыми они сталкиваются, не побуждают их хотеть улучшить работу?
Flosculus

1
Только одна идея, заставить их объединить код;) Но одна вещь, которая мешает мне в SVN часто совершать
коммиты

5
Кто несет ответственность за разрешение конфликтов после слияния?
Flosculus

Подход с высокой степенью ветвления может дать лучшее из обоих миров; если вы выполняете большую работу над веткой и регулярно объединяете основную ветку с этой веткой (так что все слияния малы), то когда вы, наконец, сливаете ветку обратно в основную, это объединение тривиально, но в то же время у вас нет получил промежуточное состояние на хозяина, которое сломано или иным образом запутанно неполно. С некоторыми SCM это проще, чем с другими (в зависимости от легкости ветвления), но может работать с любым из них.
Джон Ханна

Ответы:


47

Вы ищете техническое решение человеческой проблемы. Это редко работает.

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

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

  1. Обсудите эту проблему со своими коллегами и объясните последствия крупных коммитов. Может быть, они просто не понимают, что сложные слияния являются прямым следствием редких коммитов, а небольшие частые коммиты сделают слияния (относительно) легкими.

    Я знал многих программистов, которые были просто убеждены, что слияния всегда сложны. Они выполняли не более одного коммита в день, избегая использования мощных инструментов, таких как diff и auto-merge в Visual Studio, и имели плохую практику ручного слияния (если только «Take mine» без дальнейшей проверки diff на самом деле является хорошей практикой). Для них это не имеет ничего общего с ними , и был присущ характер слияния.

  2. Приведите конкретные примеры того, что происходит в других компаниях (особенно тех, к которым ваши коллеги относятся с большим уважением). Они могут просто не знать, что это проблема, и быть уверенными, что каждая команда делает максимум один коммит в день.

    Некоторые люди не знают, что есть команды из 5-10 участников, которые производят до 50 толчков в производство, что в среднем составляет 5-10 коммитов в день на человека. Они могут не понять ни как это возможно, ни почему кто-то это сделает.

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

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

  5. Объясните, что для совершения коммита не существует минимальной продолжительности. Коммит может даже соответствовать незначительным изменениям, сделанным за несколько секунд. Переименование файла, удаление устаревшего комментария, исправление опечатки - все это задачи, которые можно выполнить немедленно.

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

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

    Они могут дать совершенно веские причины, которые могут дать вам подсказку о том, что происходит с командой. Несколько причин, которые я слышал сам:

    • «Мой учитель / наставник сказал мне, что лучше всего делать один коммит в день». Меня это не удивляет, учитывая то , что я слышал от своих учителей в колледже .

    • «Мои коллеги сказали мне, что я должен делать меньше коммитов». Мне тоже говорили об этом в некоторых командах, и я понимаю их точку зрения. У нас был журнал, который был практически заполнен моими коммитами (это не сложно сделать, когда четыре товарища по команде даже не делают один коммит в день), что расстроило моих коллег.

    • «Я думал, что небольшие коммиты затрудняют нахождение ревизии». Как-то верный момент, даже когда команда прилагает усилия для написания описательных сообщений журнала.

    • «Я не хочу тратить слишком много места на нашем сервере контроля версий». Человек, очевидно, не понимает, как хранятся коммиты (и как дешево это место для хранения).

    • «Я думаю, что коммит должен соответствовать конкретной задаче». Учитывая, что часто задача соответствует некоторой работе, выполняемой за один день (например, на досках задач визуального управления), это не совпадение. Затем человек должен научиться определять разницу между заданием в отставании (от 2 до 8 часов работы) и логически изолированным изменением, которое должно быть совершено (от нескольких секунд до нескольких часов работы). Это также связано с пунктом 5.

  7. Ищите причину, по которой команда не выполняет коммиты чаще. Вы можете быть удивлены результатами.

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

    Другие причины могут включать в себя:

    • Слишком сложные правила для написания сообщения коммита.

    • Правило, которое заставляет разработчика связывать коммит с задачей из системы отслеживания ошибок.

    • Страх сломать сборку.

    • Нежелание иметь дело с риском сломать сборку прямо сейчас: если вы делаете коммит вечером в пятницу перед самым отъездом, вы можете отложить работу со сломанной сборкой до понедельника.

    • Страх перед слиянием.

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

    Я предпочел бы, чтобы платформа CI говорила мне, что я сломал сборку в ревизии 5023, которая состоит из изменения двух методов в одном файле, который я сделал пятнадцать минут назад, а не в ревизии 5023, состоящей из изменений, которые охватывают четыре дюжины файлов и представляют 13 часов работы.


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

@VolkerK: см. Мое редактирование (первые два абзаца ответа). У вас есть CI сервер? Когда вы разговариваете со своими коллегами, как они объясняют свое нежелание совершать чаще?
Арсений Мурзенко

1
@VolkerK Этот ответ очень хорошо объясняет. У вас нет технической проблемы. Проблема в том, что люди отказываются следовать процедуре.
BЈовић

1
К пункту 3: Клиент TortoiseSVN может создавать различные диаграммы, которые визуализируют поведение при регистрации на основе различных параметров (например, времени). На самом деле очень интересно их оценить. Я делал это часто в те дни, когда мы использовали SVN. stackoverflow.com/questions/412129/… :)
Ашратт

2
Спасибо за вклад, но я
выбрал

-3

Организация, с которой я заключил контракт в прошлом, хотела решить эту же проблему и предложила довольно хорошее социальное решение: у разработчиков нет своих компьютеров. У команды разработчиков есть компьютеры, но любого человека можно попросить работать с любым компьютером разработчика в любой день. Таким образом, регистрация - единственный способ убедиться, что вы можете продолжать работать над тем, что вы делали вчера!

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

Конечно, важно объяснить «почему» правил, а также «что». Если «почему» не выяснено, они могут просто хранить свой источник на USB-накопителях или что-то в этом роде.


4
Это ужасный способ лечения людей. Что происходит, когда вы думаете о чем-то прямо перед тем, как уйти, и хотите, чтобы оно было на машине, но оно не завершено (например, не компилируется), поэтому вы не хотите фиксировать это?
user1118321

3
И это пустая трата ресурсов, потому что обычно у вас есть настроенная среда, которая хорошо соответствует вашим потребностям. У меня была такая же ситуация давным-давно, и я получил свой ноутбук через 4 недели. Я ненавидел каждый день настраивать все то же самое, просто чтобы делать работу, которую я ожидал сделать.
mliebelt

1
Вау, это ужасная идея по многим причинам. Как уже упоминалось в комментариях выше, (1) это предотвращает любую возможность непрерывности изо дня в день и (2) лишает людей возможности настраивать пользовательские среды разработки, которые остаются рядом ...
Бен Ли,

1
... Но он также (3) может разрушить часы работы, если кто-то забудет проверить код или случайно по какой-то причине, и (4) продемонстрирует разработчикам, что руководство не доверяет им следовать правилам вместо этого навязывая правила драконовским образом, потенциально превращая их в среду «мы против них», и (5) у них есть потенциал, чтобы побудить их обходить правила просто для того, чтобы быть продуктивными.
Бен Ли

Пожалуйста, никто не реализует эту идею.
Бен Ли
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.