¿Diferencia entre autor y autor en Git?

8 minutos de lectura

¿Diferencia entre autor y autor en Git
anshul goyal

Estoy tratando de hacer un compromiso como

git commit --author="John Doe <john@doe.com>" -m "<the usual commit message>"

donde John Doe es un usuario en cuyo nombre quiero hacer la confirmación.

Aparece bien en git log. Sin embargo, cuando hago un gitk, el nombre del autor es correcto, pero el nombre del autor se selecciona de mi configuración global de configuración de git (y por lo tanto se establece en mi nombre/correo electrónico).

Preguntas

  1. ¿Cuál es la diferencia entre los dos (committer vs autor)?

  2. ¿Debería configurar el compromiso también para el otro usuario?

  3. Si es así, ¿cómo?

  • jasonnoble.org/2009/04/github-set-authorcommitter.html aquí hay una breve descripción.

    – René Höhle

    11/09/2013 a las 21:01


  • Posible duplicado de ¿Cuál es la diferencia entre autor y autor en Git?

    –Marcin Armatys

    20 de febrero de 2017 a las 14:41

  • El committer de Git se coloca en el archivo .gitconfig. Si –author es el mismo que el nombre de .gitconfig, obtienes solo el autor en el mensaje de confirmación. Si son diferentes, obtienes ambos.

    – poGUIst

    14 de noviembre de 2019 a las 17:42

El cartel original pregunta:

¿Cuál es la diferencia entre los dos (Committer vs autor)?

El autor es la persona que originalmente escribió el código. El autor, por otro lado, se supone que es la persona que cometió el código en nombre del autor original. Esto es importante en Git porque Git le permite reescribir el historial o aplicar parches en nombre de otra persona. los GRATIS en línea Git profesional libro lo explica asi:

Usted se estará preguntando cuál es la diferencia entre autor y autor. los autor es la persona que originalmente escribió el parche, mientras que el autor es la persona que aplicó el parche por última vez. Entonces, si envía un parche a un proyecto y uno de los miembros principales aplica el parche, ambos obtienen crédito: usted como autor y el miembro principal como responsable.

El cartel original pregunta:

¿Debería configurar el compromiso también para el otro usuario?

No, si quiere ser honesto, no debe asignar el autor al autor, a menos que el autor y el autor sean la misma persona.

  • Todavía estoy confundido acerca de esto. Esto sucedió y, en mi caso, que yo sepa, nunca se produjo ningún parche o reescritura del historial (a menos que algunos comandos de git creen y apliquen parches, de forma opaca, “bajo el capó”). ¿Son esas realmente las únicas 2 formas para que suceda algo como esto?

    – colineador

    14 de febrero de 2019 a las 23:19

  • Además, llamar al autor la “persona que escribió el código” no tiene sentido. ¿Cómo sabría git quién lo escribió? cuando configuras git config user y luego git add y git commitentonces git sabría quién agregó y quién se comprometió, pero aún no sabría quién lo escribió.

    – colineador

    14 de febrero de 2019 a las 23:53

  • @cowlinator No sabe quién escribió el código. Por eso tienes que contarlo, si no eres tú. Tenga en cuenta que el sistema de control de versiones distribuidas anterior a la invención de git enviaba ~~Linus~~ los correos electrónicos del mantenedor del proyecto con parches para aplicar. Esta funcionalidad está ahí para que ~~Linus~~ el mantenedor pueda aplicar su parche y al mismo tiempo darle crédito por él de una manera ‘oficial’, en lugar de solo ad-hoc en el mensaje de confirmación.

    – Nic

    27 de febrero de 2019 a las 3:28

1646974987 291 ¿Diferencia entre autor y autor en Git
Ciro Santilli Путлер Капут 六四事

Lista de correo + git format-patch + git apply puede generar autor != committer

En proyectos como el kernel de Linux donde los parches son:

  • generado por git format-patch
  • enviado por correo electrónico, ya sea copiando y pegando, o más comúnmente con git send-email
  • aplicado por otra persona con git apply o git am: ¿Cómo usar git am para aplicar parches de mensajes de correo electrónico?

generando un nuevo compromiso único con autor y autor diferentes:

  • el autor es quien escribió el parche
  • el responsable es quien mantiene el proyecto y quien fusionó el parche

Vea, por ejemplo, este parche seleccionado al azar y la confirmación correspondiente:

Las interfaces web de Git como GitHub y GitLab pueden o no generar autor != committer

Dado que Git(Hub|Lab) tiene los repositorios upstream y fork en la misma máquina, automáticamente pueden hacer cualquier cosa que tú puedas hacer localmente, incluyendo cualquiera de las siguientes:

  • Crea una confirmación de fusión.

    No genera autor != committer.

    Mantiene intacto el SHA o el nuevo compromiso y crea un nuevo compromiso:

    * Merge commit (committer == author == project maintainer)
    |\
    | * Feature commit (committer == author == contributor)
    |/
    * Old master (random committer and author)
    

    Históricamente, este fue el primer método disponible en GitHub.

    Localmente, esto se hace con git merge --no-ff.

    Esto produce dos confirmaciones por solicitud de extracción y mantiene una bifurcación en el historial de git.

  • rebase encima de master

    GitHub también piratea las confirmaciones para establecer committer == quien presionó el botón de combinación. Esto no es obligatorio, y ni siquiera se hace de forma predeterminada localmente por git rebasepero da responsabilidad al mantenedor del proyecto.

    El árbol de git ahora se ve así:

    * Feature commit (committer == maintainer, author == contributor)
    |
    * Old master (random committer and author)    
    

    que es exactamente igual a la del git apply parches de correo electrónico.

En GitHub actualmente:

  • usted elige el método cuando se fusiona a través del menú desplegable en el botón de fusión
  • el propietario puede habilitar o deshabilitar los métodos en la configuración del repositorio

https://help.github.com/articles/about-merge-methods-on-github/

¿Cómo establecer el committer de un nuevo commit?

Lo mejor que pude encontrar fue usar las variables de entorno para anular el compromiso:

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'

¿Cómo obtener el compromiso y la fecha de confirmación de una confirmación determinada?

Solo los datos del autor se muestran de forma predeterminada en git log.

Para ver la fecha del confirmador, puede:

  • formatee el registro específicamente para eso:

    git log --pretty='%cn %cd' -n1 HEAD
    

    donde cn y cd representar Committer Name y Committer Date

  • utilizar el fuller formato predefinido:

    git log --format=fuller
    

    Ver también: Cómo configurar ‘git log’ para mostrar ‘fecha de confirmación’

  • vaya a un nivel bajo y muestre todos los datos de confirmación:

    git cat-file -p HEAD
    

¿Cómo establecer la fecha de confirmación de una nueva confirmación?

git commit --date solo establece la fecha del autor: para la fecha del confirmador, lo mejor que pude encontrar fue con la variable de entorno:

GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date="2000-01-01T00:00:00+0000"

Ver también: ¿Cuál es la diferencia entre autor y autor en Git?

¿Cómo almacena Git el autor frente al confirmador internamente?

Consulte: ¿Cuál es el formato de archivo de un objeto de confirmación de git?

Básicamente, la confirmación es un archivo de texto y contiene dos campos separados por líneas:

author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}

Esto deja en claro que ambos son dos entradas de datos completamente independientes en el objeto de confirmación.

  • Tenga en cuenta que incluso con GIT_COMMITTER_* anula, git aún se negará a realizar una confirmación si no ha establecido un confirmador predeterminado usando git config.

    – adelfo

    15 de agosto de 2015 a las 16:48

  • @adelphus en Git 2.5, funciona si configura ambos GIT_{COMMITTER,AUTHOR}_EMAIL

    – Ciro Santilli Путлер Капут 六四事

    15/08/2015 a las 19:51

¿Diferencia entre autor y autor en Git
serv-inc

propuesto para usar

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'

Si accidentalmente usó diferentes nombres y correos electrónicos, y desea establecer los mismos valores:

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"

que primero establece las variables, luego las usa para el git commit llamada (observe los paréntesis dobles).

  • no responde a la pregunta, no es constructivo y no es preciso (porque el remitente no es el autor)

    – Chico

    14 de enero de 2021 a las 11:56

  • Concedido @guyarad. Algunas personas que después de la información en estas preguntas y respuestas deseen cambiar ambas pueden encontrar esto útil, por lo que permanece por ahora.

    – serv-inc

    18 de enero de 2021 a las 9:46

  • como dije, lo que estás presentando no es el autor nombre pero el autor nombre. Entonces, en todo caso, su respuesta simplemente no es precisa.

    – Chico

    19/01/2021 a las 14:00

  • No sabía que la gente lo malinterpretaría. Esperemos que sea más claro ahora.

    – serv-inc

    19 de enero de 2021 a las 14:34

  • @YassineElBadaoui: reemplazado con solo el nombre de pila + apellido, ya que parece cambiar el nombre regularmente

    – serv-inc

    17 de mayo de 2021 a las 9:53

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad