Список розсилки + git format-patch
+ git apply
може генерувати автора! = Виконавця
У таких проектах, як ядро Linux, де патчі:
створення одного нового комітету з різним автором та виконавцем:
- автор - той, хто написав патч
- Комітер - це хто підтримує проект, а хто об'єднав патч
Перегляньте, наприклад, цей випадково обраний патч та відповідну комітку:
Веб-інтерфейси Git на зразок GitHub та GitLab можуть або не можуть генерувати автора! = Committer
Оскільки Git (Hub | Lab) утримує як сховище висхідного потоку, так і вилки 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 також зламає зобов’язання встановити committer == той, хто натискав кнопку злиття. Це не є обов'язковим і навіть не робиться за замовчуванням на місцях git rebase
, але це дає відповідальність керівнику проекту.
Дерево git тепер виглядає так:
* 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', щоб відобразити 'дата фіксації'
знизьте рівень і покажіть усі дані фіксації:
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}
Це дає зрозуміти, що обидва є двома повністю незалежними записами даних в об’єкті фіксації.