J'essaye 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 faire le commit.
Cela apparaît bien git log
. Cependant, lorsque je fais un gitk
, le nom de l'auteur est correct, mais le nom du committer est choisi dans mes paramètres de configuration git globaux (et est donc défini sur mon nom / email).
Des questions
Quelle est la différence entre les deux (committer vs author)?
Dois-je également définir le committer pour l'autre utilisateur?
Si oui, comment?
git
git-config
gitk
mu 無
la source
la source
Réponses:
L'affiche originale demande:
L'auteur est la personne qui a initialement écrit le code. Le committer, d'autre part, est supposé être la personne qui a commis le code au nom de l'auteur original. Ceci est important dans Git car Git vous permet de réécrire l'historique ou d'appliquer des correctifs au nom d'une autre personne. Le livre GRATUIT Pro Git en ligne l' explique comme ceci:
L'affiche originale demande:
Non, si vous voulez être honnête, vous ne devez pas définir le committer sur l'auteur, à moins que l'auteur et le committer ne soient en fait la même personne.
la source
git config user
et puisgit add
etgit commit
, alors git saurait qui a ajouté et qui a commis, mais il ne sait toujours pas qui l'a écrit.La liste de diffusion +
git format-patch
+git apply
peut générer un auteur! = CommitterDans des projets comme le noyau Linux où les correctifs sont:
git format-patch
git send-email
git apply
ougit am
: Comment utiliser git am pour appliquer des correctifs à partir d'e-mails?générer un nouveau commit unique avec différents auteurs et committers:
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:
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 à:
qui est exactement comme celui des
git apply
patchs de messagerie.Sur GitHub actuellement:
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:
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:
où
cn
etcd
représenterCommitter Name
etCommitter Date
utilisez le
fuller
format prédéfini: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:
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: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:
Cela montre clairement que les deux sont deux entrées de données complètement indépendantes dans l'objet commit.
la source
GIT_COMMITTER_*
substitutions, git refusera toujours d'effectuer une validation si vous n'avez pas défini de commit par défaut à l'aide degit config
.GIT_{COMMITTER,AUTHOR}_EMAIL
@Ciro Santilli 新疆 改造 中心 六四 事件 法轮功 a proposé d'utiliser
Pour éviter de répéter le nom et l'e-mail, vous pouvez les réutiliser
qui définit d'abord les variables dans des commandes distinctes, puis les utilise pour l'
git commit
appel (notez les doubles parenthèses).la source