Как стимулировать более частые коммиты в SVN

Группа разработчиков, с которыми я работаю, перешла с VSS на SVN около полугода назад. Переход от CheckOut-CheckIn к Update-Commit оказался трудным для многих пользователей. Теперь, когда они больше не вынуждены возвращать свои файлы, когда они закончат работу (или, точнее, теперь, когда никто другой не может видеть, что они извлекли файл, и говорит им вернуться, чтобы снять блокировку на файл), не раз случалось, что пользователи забывали зафиксировать свои изменения до тех пор, пока они не были завершены.

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

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

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


person Yaakov Ellis    schedule 22.02.2010    source источник
comment
регистрация или мы найдем разработчиков, которые зарегистрируются, чтобы заменить вас всегда работает   -  person    schedule 22.02.2010


Ответы (10)


... пользователи забыли зафиксировать свои изменения до тех пор, пока они не были завершены.

Я думаю, что это проблема именно здесь. Как функция/исправление может быть «завершена», если она не зарегистрирована? Есть ли у вас система отслеживания проблем, которая регистрирует нерешенные проблемы? У вас есть система непрерывной интеграции, которая запускает модульные тесты сразу после регистрации?

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

person Greg Hewgill    schedule 22.02.2010
comment
К сожалению, модульные тесты и непрерывная интеграция все еще находятся на ранних стадиях внедрения. И даже с юнит-тестами, если пользователь забыл зафиксировать свои юнит-тесты в тестовом проекте, тесты все равно могут пройти без фиксации. - person Yaakov Ellis; 22.02.2010
comment
Серьезно, это то, что менеджер/руководитель разработки должен решить и обеспечить. - person Ken Liu; 22.02.2010
comment
@Yaakov Ellis, как насчет того, чтобы один и тот же человек не писал код и модульные тесты? - person Abizern; 22.02.2010
comment
@Abizern - это долгосрочная цель, но не то, что можно очень быстро реализовать повсеместно. - person Yaakov Ellis; 22.02.2010
comment
+1 Функция не завершена, пока она не будет протестирована в тестовой среде. Если вы развертываете промежуточную версию непосредственно из subversion (как и следует), это устраняет проблему «забыли зафиксировать». - person Gabe Moothart; 23.02.2010

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

person z-boss    schedule 22.02.2010
comment
Используйте FogBugz для отслеживания ошибок и собственное программное обеспечение для отслеживания задач в новых проектах. - person Yaakov Ellis; 22.02.2010
comment
+1, а также настройте средство отслеживания ошибок, чтобы оно требовало некоторого контроля качества, например. обзоры кода или тестовые обзоры. В любом случае, это хорошая идея, и она, безусловно, заставляет людей брать на себя обязательства! - person MarkJ; 30.12.2011

Если вы использовали VSS раньше, вы, вероятно, работали в Visual Studio. AnkhSVN имеет окно ожидающих изменений, как в TFS и VSS. Это окно инструментов автоматически показывает, какие файлы локально изменены в вашем решении.

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

[Посмотрите этот скриншот старой версии AnkhSVN]

person Bert Huijben    schedule 22.02.2010
comment
Примерно так же в Eclipse файлы с локальными изменениями помечаются в проводнике пакетов маленькой иконкой, указывающей статус этого файла по отношению к svn. (золотой цилиндр = нет локальных изменений с момента последнего обновления, коричневая звезда = изменено, синий «+» = добавлено и т. д.). Если у вас постоянно открывается этот вид, вы привыкаете видеть это и все золотые цилиндры, означающие, что все, что я сделал, было совершено. - person MatrixFrog; 24.02.2010

Я думаю, что проблема, с которой вы столкнулись, на самом деле заключается в отсутствии непрерывной системы сборки в сочетании с отслеживанием ошибок/функций/изменений. С системой отслеживания ошибок и последовательной сборкой разработчик может объявить себя «завершенным» только после того, как его изменения были переданы в автоматизированную сборку, и выпуск, содержащий изменения, собран, прошел тесты проверки сборки и удален в месте размещения выпуска. Поскольку единственный способ «сделать» изменение в сборке — это зафиксировать (возможна обратная интеграция функциональной ветки в основную ветку/ствол), разработчикам придется зарегистрироваться, иначе они никогда ничего не закончат. .

person Remus Rusanu    schedule 22.02.2010

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

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

person John Flinchbaugh    schedule 23.02.2010

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

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

person bdk    schedule 22.02.2010
comment
Знаете ли вы какие-либо автоматизированные инструменты, которые могут создать такое электронное письмо? - person Yaakov Ellis; 22.02.2010
comment
Извините, я полагаю, что один из наших разработчиков однажды ночью написал наш сценарий электронной почты для развлечения, и он просто прижился. - person bdk; 22.02.2010
comment
Если разработчик игнорирует систему управления версиями, не будет ли этот разработчик также игнорировать ежедневное электронное сообщение? - person Marnen Laibow-Koser; 21.02.2018

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

Хотя, похоже, что-то в корне неправильное. Как ваш разработчик вносит свои изменения в выпущенный продукт, минуя VCS? Ты должен закрыть эту заднюю дверь.

person William Pursell    schedule 22.02.2010
comment
Как ваш разработчик вносит свои изменения в выпущенный продукт, не проходя через VCS - вот в чем проблема. В небольшом количестве случаев код не был выпущен, когда он должен был быть выпущен. Я пытаюсь найти способ закрыть эту заднюю дверь прямо сейчас. - person Yaakov Ellis; 22.02.2010

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

person Matt Briggs    schedule 23.02.2010

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

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

person Christian    schedule 22.02.2010
comment
Чтение журнала фиксации работает в теории, но это трудно сделать вручную. Какой-то тип автоматизированного метода был бы предпочтительнее. В процессе доставки может участвовать третий пользователь, выполняющий обновление из SVN и затем загружающий изменения. К сожалению, все еще есть способы пойти с модульным тестированием, поэтому нет возможности автоматически проверить, что все изменения были включены (и даже если бы они были, такая же проблема с забыванием о фиксации новых модульных тестов также существовала бы). - person Yaakov Ellis; 22.02.2010

Приличный трекер ошибок/функций позволит вам добавить номер ошибки, когда вы зафиксируете свои изменения. Например, если я использую Redmine, я могу зафиксировать «Fixes # 323» где-нибудь в моем сообщении о коммите subversion, и он автоматически закроет ошибку/задачу 323. Его настройка очень проста; вам просто нужно сообщить Redmine, где находится репозиторий, который все равно запрашивает.

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

Trac также делает это, как и многие другие.

person Jim T    schedule 23.02.2010
comment
Проблема здесь не столько в том, чтобы связать коммиты с задачами. Это делается для того, чтобы убедиться, что люди совершают все. - person Yaakov Ellis; 23.02.2010
comment
Я думаю, что идея в том, что вы говорите, вы исправили эту ошибку? и если разработчик говорит Да, но я еще не коммитил, то это считается еще не исправленным - person MatrixFrog; 24.02.2010
comment
Ассоциация предназначена для того, чтобы люди совершали все. Идея заключается в том, что если вы берете задачу с веб-сайта, самый простой способ сказать, что задача выполнена, — это добавить Fixes #323 в комментарий фиксации, что как бы гарантирует, что фиксация есть. - person Jim T; 25.02.2010