Estoy tratando de hacer un compromiso 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 adentro git log
. Sin embargo, cuando hago un gitk
, el nombre del autor es correcto, pero el nombre del confirmador 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 author)?
¿Debería configurar el committer también para el otro usuario?
Si es así, ¿cómo?
git
git-config
gitk
mu 無
fuente
fuente
Respuestas:
El póster original pregunta:
El autor es la persona que originalmente escribió el código. Por otra parte, se supone que el que comete 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. El libro en línea Pro Git GRATIS lo explica así:
El póster original pregunta:
No, si quieres ser honesto, no deberías configurar el committer para el autor, a menos que el autor y el committer sean de hecho la misma persona.
fuente
git config user
y luegogit add
ygit commit
, entonces git sabría quién agregó y quién cometió, pero aún no sabría quién lo escribió.La lista de correo +
git format-patch
+git apply
puede generar author! = CommitterEn proyectos como el kernel de Linux donde los parches son:
git format-patch
git send-email
git apply
ogit am
: ¿Cómo usar git am para aplicar parches de mensajes de correo electrónico?generando una nueva confirmación con diferentes autores y confirmadores:
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:
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í:
que es exactamente como el de los
git apply
parches de correo electrónico.En GitHub actualmente:
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:
¿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:
dónde
cn
ycd
pararseCommitter Name
yCommitter Date
use el
fuller
formato predefinido:Consulte también: Cómo configurar 'git log' para mostrar 'commit date'
ir bajo nivel y mostrar todos los datos de confirmación:
¿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: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:
Esto deja en claro que ambas son dos entradas de datos completamente independientes en el objeto de confirmación.
fuente
GIT_COMMITTER_*
anulaciones, git se negará a realizar una confirmación si no ha configurado un confirmador predeterminado usandogit config
.GIT_{COMMITTER,AUTHOR}_EMAIL
@Ciro Santilli 新疆 改造 中心 六四 事件 法轮功propuso usar
Para evitar repetir el nombre y el correo electrónico, puede reutilizarlos
que primero establece las variables en comandos separados, luego las usa para la
git commit
llamada (tenga en cuenta los paréntesis dobles).fuente