В чем разница между автором и коммиттером в Git? - PullRequest
44 голосов
/ 20 июля 2011

Я только что натолкнулся на следующий коммит на GitHub: https://github.com/felixge/node-formidable/commit/0a0b150668daa3c6f01626d2565b898e5da12392

Как можно иметь несколько авторов для одного и того же коммита?

Ответы [ 4 ]

55 голосов
/ 20 июля 2011

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

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

  • git format-patch / git am - эта пара позволяет вам преобразовывать коммиты в патчи, обычно отправляемые по электронной почте, а затем заставлять их применять кого-то другого. Вы остаетесь автором; человек, который применяет их, является коммиттером. Это вполне определенно то, что произошло на github.

  • git commit --amend, git rebase, git filter-branch - Все это в основном варианты переписывания истории, начиная от одного коммита до некоторая история ветки на всю историю. Они могут потенциально изменять информацию о коммиттере - в частности, они всегда переписывают коммиттер timestamp . Первоначальный автор остается на месте (в режимах работы по умолчанию), и если автор также переписывает текст, его имя и адрес электронной почты остаются, но временная метка естественно отличается.

7 голосов
/ 20 июля 2011

С этим коммитом не связано несколько авторов (и в настоящее время невозможно назначить несколько авторов одному коммиту).В этом случае gliese1337 был автором , а felixge был коммиттером .Скорее всего, это произошло из-за того, что gliese1337 отправил запрос на извлечение, который был принят и затем передан felixhe (владельцем хранилища).Этот рабочий процесс довольно распространен на GitHub.Это также полезно в тех случаях, когда сопровождающий проекта получает исправление по электронной почте, поэтому сам автор исправления по-прежнему получает кредит на исправление, даже если он или она не имеет доступа к проекту.

Несколько связанных ссылок:

Короткий раздел Git Wiki об указании авторов
Запрос функции для нескольких авторов в ядре Git

4 голосов
/ 20 июля 2011

Это не несколько авторов. Один - автор, а другой - коммиттер.

Если бы вы сделали клон, вы бы это ясно увидели:

$ git cat-file -p 0a0b150668daa3c6f016
tree 91edcb411b7cd0708c1f5bb05621846146c9425a
parent 6b9ffe3653fe59f035b01ba1f46b5f2650be00ca
author Logan Kearsley <chronosurfer@gmail.com> 1308937685 -0700
committer Felix Geisendo╠Иrfer <felix@debuggable.com> 1309117893 +0200

Slight but definite & consistent performance boost.
1 голос

Веб-интерфейс Git, такой как GitHub и GitLab

В таких системах при слиянии патча автор может отличаться или не отличаться от коммиттера в зависимости от настроек репо.

Так как Git (Hub | Lab) хранит оба репозитория upstream и fork на одной машине, он может автоматически делать все, что вы можете делать и локально:

  • Создать коммит слияния.

    Не генерирует автора! = Коммиттер.

    Сохраняет SHA или новый коммит без изменений и создает новый коммит:

    * Merge commit (committer == author == project maintainer)
    |\
    | * Feature commit (committer == author == contributor)
    |/
    * Old master (random committer and author)
    

    Исторически это был первый доступный метод на GitHub.

    Локально, это делается с git merge --no-ff.

    Создает два коммита на запрос на извлечение и сохраняет ветвь в истории git.

  • перебазировка поверх master

    Хотя это не является обязательным в принципе и даже не выполняется по умолчанию локально с помощью git rebase, GitHub также взламывает коммиты для установки коммиттера == того, кто нажал кнопку слияния.

    Причиной этого является то, что это обеспечивает подотчетность сопровождающего проекта.

    Git tree теперь выглядит так:

    * Feature commit (committer == maintainer, author == contributor)
    |
    * Old master (random committer and author)    
    

    , что точно так же, как у git apply почтовых патчей.

На GitHub в настоящее время:

  • вы выбираете метод при слиянии через выпадающий список на кнопке слияния
  • методы могут быть включены или отключены владельцем в настройках репо

https://help.github.com/articles/about-merge-methods-on-github/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...