¿Cómo atribuir una única confirmación a varios desarrolladores?


120

La forma en que funcionan todos los sistemas de control de versiones con los que estoy familiarizado es que cada confirmación se atribuye a un solo desarrollador. El auge de la ingeniería ágil, y específicamente la programación de pares, ha llevado a una situación en la que dos desarrolladores han hecho una contribución significativa a la misma tarea, por ejemplo, una corrección de errores.

El tema de la atribución no será un gran problema en un entorno de trabajo, ya que el director del proyecto estará al tanto del trabajo que están haciendo los pares, pero ¿qué pasa si dos contribuyentes de código abierto deciden emparejarse y sacar algún código? a un proyecto en particular que no tiene idea de que están trabajando juntos. ¿Hay alguna forma de que un sistema de control de versiones como Git atribuya un parche en particular a varios desarrolladores?


10
Esto debe dividirse para cada sistema de control de versiones.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:


63
Commit title

Commit body

Co-authored-by: name <additional-dev-1@example.com>
Co-authored-by: name <additional-dev-2@example.com>

Un problema con este enfoque es que no puede crear una clave firmada para este grupo de desarrolladores, por lo que esencialmente podría agregar a cualquier persona a esta lista incluso si no funcionó en una función y Github la trataría como si lo hiciera. Sin embargo, esto no debería ser un problema en la mayoría de los casos.

p.ej Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

Con autores normales o grupos de firmas (el método anterior), verá que no está firmado y sabrá que no puede confiar en la confirmación. Sin embargo, no existe un proceso de firma de coautores.


Respuesta principalmente desactualizada:

Una solución sería establecer un nombre para el par:

git config user.name "Chris Wilson and John Smith"

Aquí hay un informe de error relacionado con otras soluciones temporales:

Error git-core: Git debería admitir varios autores para una confirmación


1
¿Qué pasa si no conoce la dirección de correo electrónico de la persona? ¿Alguna forma de vincular el nombre de usuario de GitHub, etc.?
Aaron Franke

Si hicieron un compromiso anterior, puede verificar que:git show <COMMIT_ID> --format=email
Gerry

2
Esto parece estar funcionando en GitLab (ver gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo

67

Una convención de git es usar Co-Authored-By al final del mensaje de confirmación ( git kernel: Commit Message Conventions , refiriéndose a Openstack Commit Messages ). Esta es también una de las soluciones sobre el error de git-core vinculado en la respuesta de Gerry

Co-authored-by: Some One <some.one@example.foo>

En ese comentario del 5 de mayo de 2010, Josh Triplett también sugiere implementar el soporte correspondiente en git.

Como señaló Llopis en un comentario, GitHub anunció el apoyo para esto en su blog el 29 de enero de 2018: Comprometerse junto con los coautores ( detalles ).


8
Esto ahora es compatible con GitHub.
llrs

@Llopis Acabo de ver la publicación del blog y vine aquí para actualizar mi respuesta. Es bueno ver que alguien fue más rápido :)
Kariem

Escribí un complemento de git simple para facilitar la administración automática de estos
avances de

Este enfoque parece una tontería (cf. el camino del Bazar ). Y hay un autor principal de esta manera, al que los coautores son solo una adición, si lo entiendo correctamente.
Ruslan

28

Para Bazar:

bzr commit --author Joe --author Alice --author Bob

Esos nombres se mostrarán en el registro por separado del nombre del confirmador.


20

git-pair

https://github.com/pivotal/git_scripts#git-pair

Este sencillo script de Pivotal para automatizar la atribución de programación de pares de Git.

Creas un .pairsarchivo como:

# .pairs - configuration for 'git pair'
pairs:
  # <initials>: <Firstname> <Lastname>[; <email-id>]
  eh: Edward Hieatt
  js: Josh Susser; jsusser
  sf: Serguei Filimonov; serguei
email:
  prefix: pair
  domain: pivotallabs.com
  # no_solo_prefix: true
#global: true

y entonces:

git pair sp js

conjuntos:

user.name=Josh Susser & Sam Pierson
user.email=pair+jsusser+sam@pivotallabs.com

para ti.


13

git distingue entre una confirmación authory committer[1]. Puede usarlo como una solución alternativa, por ejemplo, firme usted mismo como el committery su coautor como el author:

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

De esta manera, tanto usted como su coautor quedarán registrados en el historial de git. Correr git log --format=fuller, te dará algo como:

commit 22ef837878854ca2ecda72428834fcbcad6043a2
Author:     b <b@b>
AuthorDate: Tue Apr 12 06:53:41 2016 +0100
Commit:     a <a@a>
CommitDate: Tue Apr 12 09:18:53 2016 +0000

    Test commit.

[1] ¿ Diferencia entre autor y confirmador en Git?


4

Alternativamente, hay un proyecto de código abierto , del cual soy colaborador, en GitHub que proporciona una buena manera de hacerlo desde la línea de comandos. Este proyecto te ayuda a establecer un alias para crear confirmaciones coautorizadas de la siguiente manera:

$ git co-commit -m "Commit message" --co "co-author <co-author-email>"

Con este enfoque, puede crear confirmaciones de coautoría sin una interfaz gráfica.


5
Por lo que puedo ver, este es un alias de git que agrega "Co-autoría:" más el "coautor <co-author-email>" al final del mensaje de confirmación.
Kariem

3

Agregamos nuestros nombres a cada mensaje de confirmación al final como una convención, por ejemplo: Implemented cool feature <Aneesh | Hiren>


4
Esto es similar a la convención de git Co-Authored-Byque mencioné en una respuesta separada
Kariem

2

Prueba git-mob , lo creamos para atribuir coautores en confirmaciones.

P.ej

git mob <initials of co-authors>
git commit
git solo

1

La mayoría de las herramientas de coautoría no admiten el autocompletado. Puedes probar git-coco , está escrito en python3 (soy el desarrollador). git-cocoadmite autocompletar y auto-sugerencia. Aquí hay una instantánea de autocompletar en autores de muestra

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.