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


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 должен поддерживать несколько авторов для коммита


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>"

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


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

3

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


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


1

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

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