Список рассылки + git format-patch
+ git apply
может сгенерировать автора! = Коммиттер
В таких проектах, как ядро Linux, где исправления:
создание одного нового коммита с другим автором и коммиттером:
- автор, который написал патч
- коммиттер - это кто является сопровождающим проекта и кто слил патч
Посмотрите, например, этот случайно выбранный патч и соответствующий коммит:
Веб-интерфейсы Git, такие как GitHub и GitLab, могут создавать или не создавать автора! = Committer
Поскольку 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
GitHub также взламывает коммиты для установки коммиттера == кто бы ни нажал кнопку слияния. Это не является обязательным, и даже не выполняется по умолчанию локально git rebase
, но это обеспечивает подотчетность сопровождающему проекта.
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/
Как установить коммитер нового коммита?
Лучшее, что я мог найти, это использовать переменные окружения для переопределения коммиттера:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
Как получить коммиттера и дату фиксации данного коммита?
Только данные автора по умолчанию включены git log
.
Чтобы увидеть дату коммиттера вы можете:
Отформатируйте журнал специально для этого:
git log --pretty='%cn %cd' -n1 HEAD
где cn
и cd
стоять Committer Name
иCommitter Date
используйте fuller
предопределенный формат:
git log --format=fuller
Смотрите также: Как настроить 'git log' для отображения 'date commit'
перейти на низкий уровень и показать все данные фиксации:
git cat-file -p HEAD
Как установить дату коммиттера для нового коммита?
git commit --date
только устанавливает дату автора: для даты коммиттера лучшее, что я мог найти, было с переменной окружения:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
Смотрите также: В чем разница между автором и коммиттером в Git?
Как Git хранит автора против коммиттера внутри?
Смотрите: Каков формат файла объекта git commit?
По сути, фиксация - это текстовый файл, который содержит два поля, разделенных строками:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
Это проясняет, что оба являются двумя полностью независимыми записями данных в объекте фиксации.