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
-
¿Cuál es la diferencia entre los dos (committer vs autor)?
-
¿Debería configurar el compromiso también para el otro usuario?
-
Si es así, ¿cómo?
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.
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 rebase
pero 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.
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).
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