La liste de diffusion + git format-patch+ git applypeut générer un auteur! = Committer
Dans des projets comme le noyau Linux où les correctifs sont:
générer un nouveau commit unique avec différents auteurs et committers:
- l'auteur est l'auteur du patch
- le committer est qui est un mainteneur de projet et qui a fusionné le patch
Voir par exemple ce patch sélectionné au hasard et le commit correspondant:
Les interfaces Web Git comme GitHub et GitLab peuvent générer ou non author! = Committer
Étant donné que Git (Hub | Lab) détient à la fois les référentiels amont et fork sur une même machine, ils peuvent automatiquement faire tout ce que vous pouvez faire localement, y compris:
Créez un commit de fusion.
Ne génère pas d'auteur! = Committer.
Conserve le SHA ou le nouveau commit intact et crée un nouveau commit:
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
Historiquement, c'était la première méthode disponible sur GitHub.
Localement, cela se fait avec git merge --no-ff.
Cela produit deux validations par demande de tirage et conserve une fourchette dans l'historique git.
rebaser au-dessus de master
GitHub pirate également les commits pour définir committer == celui qui a appuyé sur le bouton de fusion. Ce n'est pas obligatoire, et ce n'est même pas fait par défaut localement par git rebase, mais cela donne la responsabilité au responsable du projet.
L'arbre git ressemble maintenant à:
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
qui est exactement comme celui des git applypatchs de messagerie.
Sur GitHub actuellement:
- vous choisissez la méthode lors de la fusion via le menu déroulant sur le bouton de fusion
- les méthodes peuvent être activées ou désactivées sur les paramètres de mise en pension par le propriétaire
https://help.github.com/articles/about-merge-methods-on-github/
Comment définir le commit d'un nouveau commit?
Le mieux que j'ai pu trouver était d'utiliser les variables d'environnement pour remplacer le committer:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
Comment obtenir le commit et la date de commit d'un commit donné?
Seules les données d'auteur s'affichent par défaut git log.
Pour voir la date de validation, vous pouvez soit:
formatez le journal spécifiquement pour cela:
git log --pretty='%cn %cd' -n1 HEAD
où cnet cdreprésenter Committer NameetCommitter Date
utilisez le fullerformat prédéfini:
git log --format=fuller
Voir aussi: Comment configurer 'git log' pour afficher la 'date de validation'
passer au niveau inférieur et afficher toutes les données de validation:
git cat-file -p HEAD
Comment définir la date de validation d'un nouveau commit?
git commit --date ne définit que la date de l'auteur: pour la date de validation, le mieux que j'ai pu trouver était avec la variable d'environnement:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
Voir aussi: Quelle est la différence entre auteur et committer dans Git?
Comment Git stocke l'auteur vs committer en interne?
Voir: Quel est le format de fichier d'un objet git commit?
Fondamentalement, la validation est un fichier texte et contient deux champs séparés par des lignes:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
Cela montre clairement que les deux sont deux entrées de données complètement indépendantes dans l'objet commit.