web-dev-qa-db-fra.com

Différence entre auteur et auteur dans Git?

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).

Des questions

  1. Quelle est la différence entre les deux (committer vs author)?

  2. Devrais-je configurer le committer également pour l'autre utilisateur?

  3. Si oui comment?

200
mu 無

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.

187
user456814

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:

générer un nouveau commit avec différents auteurs et committers:

  • l'auteur est l'auteur du patch
  • le committer est qui est le responsable du projet et qui a fusionné le correctif

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:

  • vous choisissez la méthode lors de la fusion via la liste déroulante du bouton de fusion
  • les méthodes peuvent être activées ou désactivées sur les paramètres du référentiel par le propriétaire

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
    

    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).

1
serv-inc