J'essaie de faire un commit comme
git commit --author="John Doe <[email protected]>" -m "<the usual commit message>"
où John Doe est un utilisateur au nom duquel je veux effectuer la validation.
Cela semble bien dans git log
. Cependant, lorsque je fais un gitk
, le nom de l'auteur est correct, mais le nom du commetteur est choisi dans mes paramètres de configuration globale git (et est donc défini sur mon nom/adresse électronique).
Quelle est la différence entre les deux (committer vs author)?
Devrais-je configurer le committer également pour l'autre utilisateur?
Si oui comment?
L'affiche originale demande:
Quelle est la différence entre les deux (Committer vs author)?
L'auteur est la personne qui a initialement écrit le code. Le committer, par contre, est supposé être la personne qui a commis le code pour le compte de l'auteur original. Ceci est important dans Git, car il vous permet de réécrire l’historique ou d’appliquer des correctifs pour le compte d’une autre personne. Le GRATUIT en ligne Pro Git livre = l'explique comme ceci:
Vous vous demandez peut-être quelle est la différence entre auteur et committer . L'auteur est la personne qui a écrit le correctif à l'origine, alors que l'auteur est la dernière à avoir appliqué le correctif. Ainsi, si vous envoyez un correctif à un projet et que l'un des membres principaux l'applique, vous obtenez tous les deux un crédit: vous en tant qu'auteur et le membre principal en tant que committer.
L'affiche originale demande:
Devrais-je configurer le committer également pour l'autre utilisateur?
Non, si vous voulez être honnête, vous ne devriez pas confier l'auteur à l'auteur, à moins que l'auteur et l'auteur ne soient vraiment la même personne.
La liste de diffusion + git format-patch
+ git apply
peut générer un auteur! = Committer
Dans des projets tels que le noyau Linux où les correctifs sont:
git format-patch
git send-email
git apply
ou git am
: Comment utiliser git am pour appliquer des correctifs à partir de messages électroniques?générer un nouveau commit avec différents auteurs et committers:
Voir par exemple ce patch sélectionné au hasard et le commit correspondant:
Les interfaces Web Git telles que GitHub et GitLab peuvent ou non générer un auteur! = Committer
Etant donné que Git (Hub | Lab) détient les référentiels amont et fork sur le même ordinateur, ils peuvent automatiquement effectuer tout ce que vous pouvez faire localement, notamment:
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 commits par demande de tir et conserve une fourchette dans l’historique de git.
rebase sur 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 même pas fait par défaut localement par git rebase
, mais cela rend compte 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 celle des patchs de messagerie git apply
.
Sur GitHub actuellement:
https://help.github.com/articles/about-merge-methods-on-github/
Comment définir le committer 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 committer et la date de validation d'un commit donné?
Seules les données d’auteur sont affichées par défaut sur git log
.
Pour voir la date du committer, vous pouvez soit:
formater le journal spécifiquement pour cela:
git log --pretty='%cn %cd' -n1 HEAD
où cn
et cd
signifient Committer Name
et Committer Date
utilisez le format prédéfini fuller
:
git log --format=fuller
Voir aussi: Comment configurer 'git log' pour afficher 'commit date'
allez au bas niveau et montrez la totalité des données de commit:
git cat-file -p HEAD
Comment définir la date de création d'un nouveau commit?
git commit --date
ne définit que la date de l'auteur: pour la date du committer, 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 l'auteur et l'auteur de Git?
Comment Git enregistre-t-il l'auteur et le commetteur en interne?
Voir: Quel est le format de fichier d'un objet git commit?
En gros, la validation est un fichier texte contenant deux champs séparés par une ligne:
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 qu'il s'agit de deux entrées de données complètement indépendantes dans l'objet de validation.
@Ciro Santilli proposed 改造 中心 事件 法轮功 tilisation proposée
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
Pour éviter de répéter le nom et l'adresse électronique, vous pouvez les réutiliser.
GIT_COMMITTER_NAME='a'; GIT_COMMITTER_EMAIL='a'; git commit --author "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
qui définit d’abord les variables dans des commandes séparées, puis les utilise pour l’appel git commit
(notez les doubles parenthèses).