La 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 con diferentes autores y confirmadores:
- el autor es quien escribió el parche
- el confirmador es quién mantiene el proyecto y quién 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) mantiene los repositorios ascendentes y bifurcados en la misma máquina, pueden hacer automáticamente cualquier cosa que pueda hacer localmente, incluyendo:
Crea una confirmación de fusión.
No genera autor! = Committer.
Mantiene el SHA o el nuevo commit intacto, y crea un nuevo commit:
* 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.
A nivel local, 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 local por defecto git rebase
, pero da responsabilidad al responsable 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 git apply
parches de correo electrónico.
En GitHub actualmente:
- elige el método al fusionar 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 configurar el committer de un nuevo commit?
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 committer y la fecha de commit de un commit dado?
Solo los datos del autor se muestran por defecto en git log
.
Para ver la fecha de confirmación puede:
formatee el registro específicamente para eso:
git log --pretty='%cn %cd' -n1 HEAD
dónde cn
y cd
pararse Committer Name
yCommitter Date
use el fuller
formato predefinido:
git log --format=fuller
Consulte también: Cómo configurar 'git log' para mostrar 'commit date'
ir bajo nivel y mostrar 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 de confirmación, 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 internamente Git autor vs committer?
Ver: ¿Cuál es el formato de archivo de un objeto git commit?
Básicamente, el commit 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.