Birden çok geliştiriciye tek bir taahhüt nasıl atfedilir?


120

Aşina olduğum tüm sürüm kontrol sistemlerinin çalışma şekli, her işlemin tek bir geliştiriciye atfedilmesidir. Çevik Mühendislik'in ve özellikle çift programlamanın yükselişi, iki geliştiricinin aynı göreve önemli bir katkıda bulunduğu bir duruma yol açtı, örneğin bir hata düzeltmesi.

Proje yöneticisi, çiftlerin yaptıkları işin farkında olacağından, atıf konusu bir çalışma ortamında çok fazla önemli olmayacaktır, ancak iki açık kaynak katılımcısı eşleştirmeye ve bazı kodları göndermeye karar verirse ne olur? birlikte çalıştıklarına dair hiçbir fikri olmayan belirli bir projeye. Git gibi bir sürüm kontrol sisteminin belirli bir yamayı birden çok geliştiriciye atfetmesinin bir yolu var mı?


10
Bu, her sürüm kontrol sistemi için bölünmelidir.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Yanıtlar:


64
Commit title

Commit body

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

Bu yaklaşımla ilgili bir sorun, bu geliştiriciler grubu için imzalı bir anahtar oluşturamamanızdır, bu nedenle, bir özellik üzerinde çalışmasalar bile, bu listeye herhangi birini ekleyebilmeniz ve Github bunu yapmış gibi davranmasıdır. Ancak, çoğu durumda bu bir sorun olmamalıdır.

Örneğin Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

Normal yazarlar veya imzalama grupları (eski yöntem) söz konusu olduğunda, imzalanmadığını görür ve işleme güvenemeyeceğinizi bilirsiniz. Ancak, ortak yazarlar için imzalama süreci yoktur.


Çoğunlukla modası geçmiş cevap:

Bir çözüm çifti için bir isim belirlemek olabilir:

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

İşte diğer geçici çözümlerle ilgili bir hata raporu:

Bug git-core: Git, bir kaydetme için birden çok yazarı desteklemelidir


1
Ya kişinin E-posta adresini bilmiyorsanız? GitHub kullanıcı adını vb. Bağlamanın herhangi bir yolu var mı?
Aaron Franke

Önceki bir taahhütte bulundularsa, şunları kontrol edebilirsiniz:git show <COMMIT_ID> --format=email
Gerry

2
Bu, GitLab'da zaten çalışıyor gibi görünüyor (bkz. Gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo

67

Git kuralı, commit mesajının sonunda Ortak Yazılan'ı kullanmaktır ( : Mesaj Kuralları Teslim git çekirdek atıfta openstack Mesajlar Teslim ). Bu aynı zamanda Gerry'nin cevabında bağlantılı olan git-core hatasındaki çözümlerden biridir.

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

Josh Triplett, 5 Mayıs 2010 tarihli bu yorumda ayrıca git'e karşılık gelen desteğin uygulanmasını öneriyor.

Llopis'in bir yorumda belirttiği gibi GitHub, 29 Ocak 2018'deki blogunda bunu desteklediğini duyurdu: Ortak yazarlarla birlikte işleyin ( ayrıntılar ).


8
Bu artık GitHub tarafından desteklenmektedir .
18-18:

@Llopis Blog gönderisini yeni gördüm ve cevabımı güncellemek için buraya geldim. Birini daha hızlı görmek güzel :)
Kariem

Ortak yazılan bu fragmanların otomatik olarak yönetilmesini kolaylaştırmak için basit bir git eklentisi yazdım: github.com/cac04/git-pair
c--

Bu yaklaşım bir kludge gibi görünüyor (çapraz başvuru Çarşı yolu ). Ve bu şekilde bir baş yazar var, eğer doğru anladıysam, ortak yazarlar sadece bir ek.
Ruslan

28

Çarşı için:

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

Bu isimler günlükte kaydedici adından ayrı olarak gösterilecektir.


20

Git-çift

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

Git çifti programlama ilişkilendirmesini otomatikleştirmek için Pivotal'ın bu basit komut dosyası.

.pairsŞunun gibi bir dosya oluşturursunuz :

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

ve sonra:

git pair sp js

kümeleri:

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

senin için.


13

git, bir commit authorve committer[1] arasında ayrım yapar . Bunu bir çözüm olarak kullanabilirsiniz, örneğin kendinizi committerve ortak yazarınızı şu şekilde imzalayın author:

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

Bu şekilde, hem siz hem de ortak yazarınız git geçmişine kaydedilecektir. Koşmak git log --format=fullersize şöyle bir şey verecektir:

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] Git'te yazar ve yapan arasındaki fark nedir?


4

Alternatif olarak, GitHub'da bunu komut satırından yapmanın iyi bir yolunu sağlayan, katkıda bulunduğum açık kaynaklı bir proje var . Bu proje, aşağıdaki gibi birlikte otomatik olarak kaydedilen işlemeler oluşturmak için bir takma ad belirlemenize yardımcı olur:

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

Bu yaklaşımı kullanarak, grafik arabirim olmadan birlikte yazılan işlemeler oluşturabilirsiniz.


5
Gördüğüm kadarıyla bu, commit mesajının sonuna "Ortak yazar:" artı "ortak yazar <ortak-yazar-posta>" ekleyen bir git takma adı.
Kariem

3

Adlarımızı her bir commit mesajına sonunda bir kongre olarak ekliyoruz, örneğin: Implemented cool feature <Aneesh | Hiren>


4
Bu, ayrı bir cevaptaCo-Authored-By bahsettiğim git kuralına benzer
Kariem

2

Git-mob'u deneyin , biz onu ortak yazarları taahhütlere atfetmek için oluşturduk.

Örneğin

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.