Jak przypisać pojedyncze zatwierdzenie wielu programistom?

120

Sposób, w jaki działają systemy kontroli wersji, które znam, polega na tym, że każde zatwierdzenie jest przypisywane do jednego programisty. Rozwój Agile Engineering, a konkretnie programowania w parach, doprowadził do sytuacji, w której dwóch programistów wniosło znaczący wkład w to samo zadanie, na przykład poprawkę błędu.

Kwestia atrybucji nie będzie zbyt wielkim problemem w środowisku pracy, ponieważ kierownik projektu będzie świadomy pracy wykonywanej przez pary, ale co, jeśli dwóch współtwórców open source zdecyduje się połączyć w pary i wypchnąć trochę kodu do konkretnego projektu, który nie ma pojęcia, że ​​pracują razem. Czy istnieje sposób, aby system kontroli wersji, taki jak Git, przypisał określoną poprawkę wielu programistom?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
10
Należy to podzielić dla każdego systemu kontroli wersji.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

63
Commit title

Commit body

Co-authored-by: name <[email protected]>
Co-authored-by: name <[email protected]>

Jednym z problemów z tym podejściem jest to, że nie możesz utworzyć podpisanego klucza dla tej grupy programistów, więc zasadniczo możesz dodać kogokolwiek do tej listy, nawet jeśli nie pracował nad funkcją, a Github traktowałby to tak, jakby to robili. Jednak w większości przypadków nie powinno to stanowić problemu.

na przykład Co-authored-by: Linus Torvalds <[email protected]>

W przypadku zwykłych autorów lub grup podpisujących (stara metoda) zobaczyłbyś, że nie jest podpisany i wiesz, że nie możesz ufać zatwierdzeniu. Jednak nie ma procesu podpisywania współautorów.


Przeważnie nieaktualna odpowiedź:

Jednym z rozwiązań byłoby ustawienie nazwy dla pary:

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

Oto powiązany raport o błędzie z innymi tymczasowymi rozwiązaniami:

Błąd git-core: Git powinien obsługiwać wielu autorów do zatwierdzenia

Gerry
źródło
1
A co, jeśli nie znasz adresu e-mail tej osoby? Jakikolwiek sposób na powiązanie nazwy użytkownika GitHub itp.?
Aaron Franke
Jeśli popełnili poprzednie zobowiązanie, możesz po prostu sprawdzić, czy:git show <COMMIT_ID> --format=email
Gerry
2
Wygląda na to, że to już działa w GitLab (patrz gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo
67

Konwencja git polega na użyciu współtworzenia na końcu komunikatu o zatwierdzeniu ( jądro git: Commit Message Conventions , odnosząc się do Openstack Commit Messages ). Jest to również jedno z rozwiązań dotyczących błędu git-core, o którym mowa w odpowiedzi Gerry'ego

Co-authored-by: Some One <[email protected]>

W tym komentarzu z 5 maja 2010 roku Josh Triplett sugeruje również wdrożenie odpowiedniego wsparcia w git.

Jak zauważył Llopis w komentarzu, GitHub ogłosił wsparcie dla tego na swoim blogu 29 stycznia 2018: Commit with współautorzy ( szczegóły ).

Kariem
źródło
8
Jest to teraz obsługiwane przez GitHub.
llrs
@Llopis Właśnie zobaczyłem post na blogu i przyszedłem tutaj, aby zaktualizować moją odpowiedź. Dobrze widzieć kogoś szybciej :)
Kariem
Napisałem prosty git plugin aby łatwiej zarządzać nich Współautor po przyczep automatycznie: github.com/cac04/git-pair
C--
To podejście wygląda jak kludge (por . Sposób bazarowy ). I tak jest główny autor, do którego współautorzy są tylko dodatkiem, jeśli dobrze to rozumiem.
Ruslan
28

Dla bazaru:

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

Nazwy te będą wyświetlane w dzienniku niezależnie od nazwy autora.

bialix
źródło
20

git-pair

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

Ten prosty skrypt od Pivotal do automatyzacji przypisywania programowania par Git.

Tworzysz taki .pairsplik jak:

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

i wtedy:

git pair sp js

zestawy:

user.name=Josh Susser & Sam Pierson
[email protected]

dla Ciebie.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
źródło
13

git rozróżnia zatwierdzenie authori committer[1]. Możesz go użyć jako obejścia, np. Podpisać siebie jako committeri współautora jako author:

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

W ten sposób zarówno Ty, jak i Twój współautor zostaniecie zapisani w historii git. Running git log --format=fuller, da ci coś takiego:

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] Różnica między autorem a autorem w Git?

Jakub Kukul
źródło
4

Alternatywnie, istnieje projekt open source , którego jestem współtwórcą, na GitHub, który zapewnia dobry sposób na zrobienie tego z wiersza poleceń. Ten projekt pomaga ustawić alias w celu utworzenia współautorów zatwierdzeń w następujący sposób:

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

Korzystając z tego podejścia, możesz tworzyć wspólne zmiany bez interfejsu graficznego.

foo0x29a
źródło
5
Z tego, co widzę, jest to alias git, który dodaje „Współautorstwo:” oraz „współautora <co-author-email>” na końcu komunikatu zmiany.
Kariem,
3

Dodajemy nasze nazwy do każdej wiadomości o zatwierdzeniu na końcu jako konwencję, np .: Implemented cool feature <Aneesh | Hiren>

Aneesh
źródło
4
Jest to podobne do konwencji git, o Co-Authored-Byktórej wspomniałem w osobnej odpowiedzi
Kariem
2

Wypróbuj git-mob , stworzyliśmy go do przypisywania współautorów do zatwierdzeń.

Na przykład

git mob <initials of co-authors>
git commit
git solo
Dennis
źródło