La liste de diffusion + git format-patch
+ git apply
peut 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 apply
patchs 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ù cn
et cd
représenter Committer Name
etCommitter Date
utilisez le fuller
format 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.