Come attribuire un singolo commit a più sviluppatori?


120

Il modo in cui tutti i sistemi di controllo delle versioni che conosco funzionano è che ogni commit viene attribuito a un singolo sviluppatore. L'ascesa dell'Agile Engineering, e in particolare della programmazione in coppia, ha portato a una situazione in cui due sviluppatori hanno dato un contributo significativo allo stesso compito, ad esempio una correzione di bug.

Il problema dell'attribuzione non sarà un grosso problema in un ambiente di lavoro poiché il project manager sarà a conoscenza del lavoro che le coppie stanno facendo, ma cosa succederebbe se due contributori open source decidessero di accoppiarsi e distribuire del codice a un progetto particolare che non ha idea che stanno lavorando insieme. C'è un modo per un sistema di controllo della versione come Git di attribuire una particolare patch a più sviluppatori?


10
Questo dovrebbe essere suddiviso per ogni sistema di controllo della versione.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Risposte:


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 questo approccio è che non puoi creare una chiave firmata per questo gruppo di sviluppatori, quindi puoi essenzialmente aggiungere qualcuno a questo elenco anche se non ha funzionato su una funzionalità e Github lo tratterebbe come se lo facessero. Tuttavia, questo non dovrebbe essere un problema nella maggior parte dei casi.

per esempio Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

Con autori normali o gruppi di firma (il vecchio metodo) vedresti che non è firmato e sapresti che non puoi fidarti del commit. Tuttavia, non esiste un processo di firma per i coautori.


Risposta per lo più obsoleta:

Una soluzione sarebbe impostare un nome per la coppia:

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

Ecco una segnalazione di bug correlata con altre soluzioni temporanee:

Bug git-core: Git dovrebbe supportare più autori per un commit


1
E se non conosci l'indirizzo email della persona? Un modo per collegare il nome utente GitHub ecc.?
Aaron Franke

Se hanno fatto un commit precedente puoi semplicemente controllare che:git show <COMMIT_ID> --format=email
Gerry

2
Questo sembra già funzionare in GitLab (vedi gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo

67

Una convenzione di git consiste nell'usare Co-Authored-By alla fine del messaggio di commit ( kernel git: Convenzioni dei messaggi di commit , che si riferisce ai messaggi di commit di openstack ). Questa è anche una delle soluzioni al bug git-core collegato in risposta di Gerry

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

In quel commento del 5 maggio 2010, Josh Triplett suggerisce anche di implementare il supporto corrispondente in git.

Come ha sottolineato Llopis in un commento, GitHub ha annunciato il supporto per questo sul loro blog il 29 gennaio 2018: Impegnarsi insieme ai coautori ( dettagli ).


8
Questo è ora supportato da GitHub.
Il

@Llopis Ho appena visto il post sul blog ed è venuto qui per aggiornare la mia risposta. Bello vedere che qualcuno è stato più veloce :)
Kariem

Ho scritto un semplice plugin git per rendere più semplice la gestione automatica di questi trailer di co-autore: github.com/cac04/git-pair
c--

Questo approccio sembra un kludge (cfr. Il modo Bazaar ). E c'è un autore principale in questo modo, a cui i coautori sono solo un'aggiunta, se ho capito bene.
Ruslan,

28

Per Bazaar:

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

Questi nomi verranno visualizzati nel registro separatamente dal nome del committer.


20

git-pair

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

Questo semplice script di Pivotal per automatizzare l'attribuzione della programmazione in coppia Git.

Crei un .pairsfile come:

# .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 poi:

git pair sp js

imposta:

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

per te.


13

git distingue tra un commit authore committer[1]. Potresti usarlo come soluzione alternativa, ad esempio firmati come committere il tuo coautore come author:

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

In questo modo, sia tu che il tuo coautore sarete registrati nella cronologia di git. Correre git log --format=fuller, ti darà qualcosa come:

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] Differenza tra autore e committer in Git?


4

In alternativa, c'è un progetto open source , di cui sono un collaboratore, su GitHub che fornisce un buon modo per farlo dalla riga di comando. Questo progetto ti aiuta a impostare un alias per creare commit co-autorizzati come segue:

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

Utilizzando questo approccio, sei in grado di creare commit co-autore senza un'interfaccia grafica.


5
Da quello che posso vedere, questo è un alias git che aggiunge "Co-authored-by:" più il "co-author <co-author-email>" alla fine del messaggio di commit.
Kariem

3

Aggiungiamo i nostri nomi a ciascun messaggio di commit alla fine come convenzione, ad esempio: Implemented cool feature <Aneesh | Hiren>


4
Questo è simile alla convenzione git che Co-Authored-Byho menzionato in una risposta separata
Kariem

2

Prova git-mob , l'abbiamo creato per attribuire i coautori sui commit.

Per esempio

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.