tipos - git ver archivos modificados
¿Cuál es la diferencia entre autor y committer en Git? (4)
En realidad, no son dos autores, es un autor y un committer. Los dos campos tienen diferentes significados. El autor es quien creó el contenido, y el autor es quien lo cometió. Cuando haces un compromiso normal, eres ambos. (Y ambos vienen con un correo electrónico asociado y marca de tiempo).
Pero pueden volverse diferentes en algunas formas clave:
git format-patch
/git am
: este par te permite convertir los commits en parches, generalmente enviados por correo electrónico, y que alguien más los aplique. Usted sigue siendo el autor; la persona que los aplica es el committer. Esto es definitivamente lo que sucedió en Github allí.git commit --amend
,git rebase
,git filter-branch
- Estas son básicamente variantes en la reescritura del historial, que van desde el compromiso simple hasta el historial de una sucursal hasta el historial completo. Pueden modificar potencialmente la información del committer, en particular, siempre reescriben la marca de tiempo del committer. El autor original permanece en su lugar (en modos de operación predeterminados), y si el autor también es el que está reescribiendo, su nombre y correo electrónico se quedan, pero la marca de tiempo es naturalmente diferente.
Acabo de encontrar la siguiente confirmación en GitHub: https://github.com/felixge/node-formidable/commit/0a0b150668daa3c6f01626d2565b898e5da12392
¿Cómo se puede lograr tener múltiples autores en el mismo compromiso así?
No hay múltiples autores asociados con esa confirmación (ni actualmente es posible asignar múltiples autores a una única confirmación). En este caso, gliese1337 fue el autor , y felixge fue el autor . Lo más probable es que esto ocurra porque gliese1337 envió una solicitud de extracción que fue aceptada y luego confirmada por felixhe (el propietario del repositorio). Ese flujo de trabajo es bastante común en GitHub. Esto también es útil para casos en los que un mantenedor del proyecto recibe un parche por correo electrónico, por lo que el autor del parche en sí recibe crédito por el parche, incluso si no tiene acceso de confirmación al proyecto.
Un par de enlaces relacionados:
Sección Wiki de Short Git sobre la atribución del autor
Una solicitud de función para funcionalidad de autor múltiple en Git core
No son múltiples autores. Uno es el autor y otro es el commiter.
Si hicieras un clon, podrías verlo claramente:
$ git cat-file -p 0a0b150668daa3c6f016
tree 91edcb411b7cd0708c1f5bb05621846146c9425a
parent 6b9ffe3653fe59f035b01ba1f46b5f2650be00ca
author Logan Kearsley <[email protected]> 1308937685 -0700
committer Felix Geisendo╠Иrfer <[email protected]> 1309117893 +0200
Slight but definite & consistent performance boost.
Interfaz web Git como GitHub y GitLab
En dichos sistemas, al fusionar un parche, el autor puede o no ser diferente del autor del commit dependiendo de la configuración del informe.
Dado que Git (Hub | Lab) mantiene tanto los repositorios ascendentes como los repositorios de horquillas en la misma máquina, también puede hacer automáticamente cualquier acción que pueda hacer localmente:
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
Si bien esto no es obligatorio en principio, y ni siquiera se realiza de forma predeterminada a nivel local por
git rebase
, GitHub tambiéngit rebase
los commits para establecer committer == quien presionó el botón de fusión.La razón para hacer esto es que 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/