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

Использование git для обзоров кодов?

Я хотел бы разработать легкий анализ кода, который похож на тот, который я использовал, когда работал в MSFT.

Это общая схема процесса:

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

Просто чтобы быть ясным: я знаю, как изменить код (: D) и отправить электронную почту. Я хотел бы узнать, есть ли простой способ создать архив изменений и легко просмотреть их в инструменте diff с помощью git. Я думаю, что я могу создать git patch и отправить по электронной почте это, но это только 1/2 истории. Могу ли я легко узнать, что делает патч для текущей базы кода?

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

4b9b3361

Ответ 1

Используйте Github. Рабочий процесс немного меняется:

  • Разработчик вносит изменения.
  • Разработчик выполняет код
  • Разработчик нажимает на Github
  • Разработчик отправляет запрос на вывод команды/рецензента команды
  • Рецензент принимает изменения и объединяет код в основной репозиторий

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

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

Это очень распространенная ситуация. Люди часто хотят Принудительные проверки кода, и GitHub делает его неоспоримо легко. Фактически, многие люди начинают использовать github просто для принудительного анализа кода.

Ответ 2

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

Вместо того, чтобы отправлять исправления по электронной почте, почему бы не нажать удаленную ветку и не попросить рецензента взять на себя ответственность за слияние ее с вашей основной ветвью развития? Таким образом, вы можете положиться на свой репозиторий, чтобы показать, какой код был или не был объединен в вашу основную ветвь (git branch -r --no-merged). Вы можете легко переустановить ветки функций, нуждающиеся в обзоре, чтобы держать их впереди своей основной ветки, позволяя обзору выполнять быстрое слияние и не беспокоиться о конфликтах слияния. Вы также можете воспользоваться любыми инструментами git -aware diff, чтобы просмотреть изменения.

Лично я бы предложил также, чтобы ваши рецензенты объединили ветки функций, используя --no-ff, чтобы создать фиксацию слияния, чтобы получить историю, которая выглядит примерно так:

git log --graph
*   commit 84b9...
|\  Merge: 8d56... f301...
| | Author: Reviewer <[email protected]>
| | Date:   Tue Mar 15 15:53:20 2011 -0700
| | 
| |     Merge branch 'feature-foobar'
| |   
| * commit f301...
| | Author: Developer <[email protected]>
| | Date:   Mon Mar 14 16:53:21 2011 -0700
| | 
| |     Add more foobars
| |   
| * commit c867...
|/  Author: Developer <[email protected]>
|   Date:   Mon Mar 14 10:09:12 2011 -0700
|   
|       Add foobar feature
|  
*   commit 74e6...
|\  Merge: 4232... 8d0e...

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

Ответ 4

Я искренне рекомендую Critic, систему анализа Git, разработанную и используемую в Opera Software. W3C также использует его для проверки тестов.


С Critic нормальная работа выглядит так:

  • Записать код, зафиксировать
  • Нажмите на критический пульт (обычно у вас есть origin и critic)
  • Критик отправляет письма тем, чьи фильтры соответствуют вашим измененным файлам, им присваиваются эти файлы.
  • Некоторые из этих людей входят и просматривают файлы, которым они назначены.
  • Когда просмотр выполнен на 100% (критик отслеживает его), вы можете интегрировать свою ветку

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

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

Типичный сценарий:

100% reviewed, 2 issues

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

98% reviewed, 0 issues

И когда кто-то увидел это, он обновился до 100% снова, а затем Review Accepted.


Ему не хватает продвижения и блеска, но с удовольствием приятно работать. Мы также должны использовать Gerrit для наших обзоров Chromium (я работаю в Opera), и мы использовали ReviewBoard очень короткое время (неудовлетворенность RB была на самом деле прямой причиной, по которой Критик был создан в первую очередь).

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

Ответ 5

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

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

Ответ 6

Я также хотел бы взглянуть на Совет по обзору:

http://www.reviewboard.org/

Совет по обзору был первоначально разработан несколькими инженерами в моей компании (VMware, Inc.) и используется большим количеством корпоративных программных компаний с рабочим процессом, очень похожим на то, что вы описываете. В настоящее время для этого требуется установка центрального сервера (это довольно стандартное приложение MVAIK на основе Django), однако они также работают над сервисом хостинга:

https://www.rbcommons.com/

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

http://www.reviewboard.org/docs/manual/dev/faq/

Я использовал Обзорный совет с момента его создания. До его появления мы использовали систему почтовых патчей, очень похожую на то, что вы описали, и Review Board сделала большой шаг вперед.

Ответ 7

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

Ответ 8

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

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

  • На стороне отправки git send-email позволяет отправлять патч по электронной почте. Просто отправить патч недостаточно, поскольку он не передает метаданные, такие как сообщение журнала. Если git send-email не работает для вас, git format-patch может создать патч с метаданными, который вы можете отправить так, как вы хотите.

  • В конце приемника git am позволяет взять набор исправленных по электронной почте патчей в формате mbox и применить его к репозиторий. Некоторые почтовые программы позволяют запускать произвольную команду в сообщении: тогда работает git am в сообщении. Альтернативой является сохранение по электронной почте патчей в файл mbox и запуск git am на нем из командной строки. Обзор можно сделать либо путем чтения патча, либо путем применения патча к бросающейся ветке и чтения истории в этой ветке.

FYI, так развивается инструмент Git (см. SubmittingPatches для получения дополнительной информации).

Ответ 9

Могу ли я легко узнать, что будет делать патч для текущей базы кода?

Git 2.17.x(Q1 2018) может помочь с git format-patch:
" git format-patch " научился давать 72-cols для diffstat, что согласуется с другими ограничениями длины строки, которые использует подкоманда для вывода, предназначенного для электронной почты.

См. Фиксацию 071dd0b (01 февраля 2018 г.) и совершение 43662b2 (25 января 2018 г.) Nguyễn Thái Ngọc Duy (pclouds).
(Слияние с Юнио С Хамано - gitster - в совершении e469e9c, 21 февраля 2018 года)

format-patch: уменьшить ширину патча difftat до 72

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