Как приписать один коммит нескольким разработчикам?

120

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

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

Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
10
Это должно быть разделено для каждой системы контроля версий.
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功

Ответы:

64
Commit title

Commit body

Co-authored-by: name <additional-dev-1@example.com>
Co-authored-by: name <additional-dev-2@example.com>

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

например Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

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


В основном устаревший ответ:

Одним из решений было бы указать имя для пары:

git config user.name "Chris Wilson and John Smith"

Вот связанный отчет об ошибке с другими временными решениями:

Ошибка git-core: Git должен поддерживать несколько авторов для коммита

Gerry
источник
1
Что делать, если вы не знаете адрес электронной почты человека? Любой способ связать имя пользователя GitHub и т. Д.?
Аарон Франке
Если они сделали предыдущую фиксацию, вы можете просто проверить это:git show <COMMIT_ID> --format=email
Джерри
2
Похоже, это уже работает в GitLab (см. Gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo
67

Соглашение git заключается в использовании Co-Authored-By в конце сообщения о фиксации ( git kernel: Commit Message Conventions , ссылаясь на сообщения о фиксации Openstack ). Это также является одним из решений на ГИТ-ядро ошибки , связанные в ответ Джерри

Co-authored-by: Some One <some.one@example.foo>

В этом комментарии от 5 мая 2010 г. Джош Триплетт также предлагает реализовать соответствующую поддержку в git.

Как отметил Ллопис в комментарии, GitHub объявил о поддержке этого в своем блоге 29 января 2018 г .: Зафиксируйте вместе с соавторами ( подробности ).

Карием
источник
8
Теперь это поддерживается GitHub.
llrs
@Llopis Только что посмотрел сообщение в блоге и пришел сюда, чтобы обновить свой ответ.
Приятно
Я написал простой мерзавец плагин , чтобы сделать его легче управлять ими Соавтор-трейлерами автоматически: github.com/cac04/git-pair
c--
Этот подход выглядит как кладж (ср. Способ Базара ). И вот здесь есть главный автор, соавторы которого, если я правильно понимаю, всего лишь дополнение.
Руслан
28

Для базара:

bzr commit --author Joe --author Alice --author Bob

Эти имена будут показаны в журнале отдельно от имени коммиттера.

биаликс
источник
20

git-pair

https://github.com/pivotal/git_scripts#git-pair

Этот простой скрипт от Pivotal для автоматизации атрибуции парного программирования Git.

Вы создаете такой .pairsфайл:

# .pairs - configuration for 'git pair'
pairs:
  # <initials>: <Firstname> <Lastname>[; <email-id>]
  eh: Edward Hieatt
  js: Josh Susser; jsusser
  sf: Serguei Filimonov; serguei
email:
  prefix: pair
  domain: pivotallabs.com
  # no_solo_prefix: true
#global: true

а потом:

git pair sp js

наборы:

user.name=Josh Susser & Sam Pierson
user.email=pair+jsusser+sam@pivotallabs.com

для тебя.

Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
источник
13

git различает коммит authorи committer[1]. Вы можете использовать это как обходной путь, например, подписаться как committerавтор и ваш соавтор как author:

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a@a' git commit --author 'b <b@b>'

Таким образом, вы и ваш соавтор будете записаны в историю git. Запуск git log --format=fullerдаст вам что-то вроде:

commit 22ef837878854ca2ecda72428834fcbcad6043a2
Author:     b <b@b>
AuthorDate: Tue Apr 12 06:53:41 2016 +0100
Commit:     a <a@a>
CommitDate: Tue Apr 12 09:18:53 2016 +0000

    Test commit.

[1] В чем разница между автором и коммиттером в Git?

Якуб Кукул
источник
4

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

$ git co-commit -m "Commit message" --co "co-author <co-author-email>"

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

foo0x29a
источник
5
Насколько я могу судить, это псевдоним git, который добавляет «Соавтор:» плюс «соавтор <co-author-email>» в конец сообщения фиксации.
Kariem
3

Мы добавляем наши имена к каждому сообщению о фиксации в конце в качестве соглашения, например: Implemented cool feature <Aneesh | Hiren>

Aneesh
источник
4
Это похоже на соглашение git, о котором Co-Authored-Byя упоминал в отдельном ответе
Карием
2

Попробуйте git-mob , мы создали его для атрибуции соавторов при коммитах.

Например

git mob <initials of co-authors>
git commit
git solo
Деннис
источник
1

Большинство инструментов соавтора не поддерживают автозаполнение. Вы можете попробовать git-coco , он написан на python3 (я разработчик). git-cocoподдерживает автозаполнение и автоматическое предложение. Вот автозаполнение снимков по авторам образцов

NSN
источник