Como atribuir um único commit a vários desenvolvedores?


120

A maneira como todos os sistemas de controle de versão com os quais estou familiarizado funcionam é que cada commit é atribuído a um único desenvolvedor. O surgimento da Engenharia Ágil e, especificamente, da programação em pares, levou a uma situação em que dois desenvolvedores deram uma contribuição significativa para a mesma tarefa, uma correção de bug, por exemplo.

A questão da atribuição não será um grande problema em um ambiente de trabalho, uma vez que o gerente de projeto estará ciente do trabalho que os pares estão fazendo, mas e se dois contribuidores de código aberto decidirem formar pares e enviar algum código para um projeto específico que não tem ideia de que estão trabalhando juntos. Existe alguma maneira de um sistema de controle de versão como o Git atribuir um patch específico a vários desenvolvedores?


10
Isso deve ser dividido para cada sistema de controle de versão.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respostas:


63
Commit title

Commit body

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

Um problema com esta abordagem é que você não pode criar uma chave assinada para este grupo de desenvolvedores, então você pode essencialmente adicionar qualquer um a esta lista, mesmo que não funcione em um recurso e o Github o trataria como se funcionasse. No entanto, isso não deve ser um problema na maioria dos casos.

por exemplo Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

Com autores normais ou grupos de assinatura (o método antigo), você veria que não está assinado e saberia que não pode confiar no commit. No entanto, não há processo de assinatura de co-autores.


Resposta geralmente desatualizada:

Uma solução seria definir um nome para o par:

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

Aqui está um relatório de bug relacionado com outras soluções temporárias:

Bug git-core: o Git deve oferecer suporte a vários autores para um commit


1
E se você não souber o endereço de e-mail da pessoa? Qualquer forma de vincular o nome de usuário do GitHub etc?
Aaron Franke

Se eles fizeram um commit anterior, você pode apenas verificar:git show <COMMIT_ID> --format=email
Gerry

2
Isso parece já estar funcionando no GitLab (consulte gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo

67

Uma convenção git é usar Co-Authored-By no final da mensagem de confirmação ( kernel do git: Convenções de Mensagem de Commit , referindo-se a Mensagens de Commit do Openstack ). Essa também é uma das soluções para o bug git-core vinculado à resposta de Gerry

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

Nesse comentário em 5 de maio de 2010, Josh Triplett também sugere a implementação do suporte correspondente no git.

Como Llopis apontou em um comentário, o GitHub anunciou suporte para isso em seu blog em 29 de janeiro de 2018: Comprometa-se junto com os co-autores ( detalhes ).


8
Isso agora é compatível com o GitHub.
11 de

@Llopis Acabei de ver a postagem do blog e vim aqui para atualizar minha resposta. Bom ver que alguém foi mais rápido :)
Kariem

Eu escrevi um plug-in git simples para facilitar o gerenciamento automático desses
c--

Essa abordagem parece um kludge (cf. o modo Bazar ). E tem um autor principal assim, ao qual os coautores são apenas um acréscimo, se bem entendi.
Ruslan

28

Para Bazar:

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

Esses nomes serão mostrados no log separadamente do nome do committer.


20

git-pair

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

Este script simples do Pivotal para automatizar a atribuição de programação de pares Git.

Você cria um .pairsarquivo 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

e depois:

git pair sp js

conjuntos:

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

para voce.


13

git distingue entre um commit authore committer[1]. Você pode usá-lo como uma solução alternativa, por exemplo, assine você mesmo como o committere seu co-autor como author:

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

Dessa forma, você e seu co-autor serão registrados no histórico do git. Correndo git log --format=fuller, vai lhe 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] Diferença entre autor e committer no Git?


4

Como alternativa, existe um projeto de código aberto , do qual sou colaborador, no GitHub que oferece uma boa maneira de fazer isso na linha de comando. Este projeto ajuda você a definir um alias para criar commits em coautoria da seguinte maneira:

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

Usando essa abordagem, você é capaz de criar commits em coautoria sem uma interface gráfica.


5
Pelo que posso ver, este é um alias git que adiciona "Co-autoria de:" mais o "co-autor <co-author-email>" ao final da mensagem de confirmação.
Kariem

3

Adicionamos nossos nomes a cada mensagem de confirmação no final como uma convenção, por exemplo: Implemented cool feature <Aneesh | Hiren>


4
Isso é semelhante à convenção git Co-Authored-Byque mencionei em uma resposta separada
Kariem


1

A maioria das ferramentas de co-autoria não oferece suporte para preenchimento automático. Você pode tentar git-coco , escrito em python3 (eu sou o desenvolvedor). git-cocosuporta preenchimento automático e sugestão automática. Aqui está um autocompletar instantâneo em autores de amostra

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.