trucos tag que name hace conectar con commits commands comentarios codigos git git-config gitk

que - git tag name



Diferencia entre autor y committer en Git? (2)

El cartel original pregunta:

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

El autor es la persona que originalmente escribió el código. Por otro lado, se considera que el autor es la persona que cometió el código en nombre del autor original. Esto es importante en Git porque Git te permite reescribir el historial o aplicar parches en nombre de otra persona. El libro GRATUITO en línea Pro Git lo explica así:

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

El cartel original pregunta:

¿Debo configurar el committer también para el otro usuario?

No, si quiere ser honesto, no debe establecer el committer para el autor, a menos que el autor y el committer sean de hecho la misma persona.

Estoy tratando de hacer una confirmación como

git commit --author="John Doe <[email protected]>" -m "<the usual commit message>"

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

Parece estar bien en el git log . Sin embargo, cuando hago un gitk , el nombre del autor es correcto, pero el nombre del committer se escoge 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 author)?

  2. ¿Debo configurar el committer también para el otro usuario?

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


Lista de correo + git format-patch + git apply puede generar author! = Committer

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

generando una nueva confirmación única con diferentes autores y committer:

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

Ver, 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) mantiene los repositorios de subida y de horquilla en la misma máquina, también pueden hacer automáticamente cualquier acción que pueda hacer localmente, incluyendo cualquiera de los siguientes:

  • Crear una fusión de compromiso.

    No genera author! = Committer.

    Mantiene el SHA o el nuevo compromiso intactos 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 un tenedor en el historial de git.

  • rebase en la parte superior del master

    GitHub también piratea los commits para establecer committer == quienquiera que haya presionado el botón de fusión. Esto no es obligatorio, ni siquiera lo hace de forma predeterminada a nivel local por git rebase , pero le da responsabilidad al mantenedor del proyecto.

    El árbol git ahora se ve así:

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

    que es exactamente como el de los parches de correo electrónico de git apply .

En GitHub actualmente:

  • eliges el método al fusionar mediante el menú desplegable en el botón de fusión
  • los métodos pueden ser habilitados o deshabilitados en la configuración del repositorio por el propietario

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

¿Cómo configurar el committer de una nueva confirmación?

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

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

¿Cómo obtener el compromiso y la fecha de compromiso de un compromiso determinado?

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

Para ver la fecha de compromiso, puede:

  • formatee el registro específicamente para eso:

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

    donde cn y cd significan Committer Name y Committer Date

  • use el formato predefinido fuller :

    git log --format=fuller

    Vea también: Cómo configurar ''git log'' para mostrar ''commit date''

  • ir a bajo nivel y mostrar toda la información de compromiso:

    git cat-file -p HEAD

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

git commit --date solo establece la fecha de autor: para la fecha del committer 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 committer en Git?

¿Cómo almacena Git vs committer internamente?

Ver: ¿Cuál es el formato de archivo de un objeto de commit 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 ambas son dos entradas de datos completamente independientes en el objeto de confirmación.