Bagaimana cara mengatribusikan satu komitmen ke beberapa pengembang?


120

Cara kerja semua sistem kontrol versi yang saya kenal adalah bahwa setiap komit dikaitkan ke satu pengembang. Munculnya Agile Engineering, dan khususnya pemrograman pasangan, telah mengarah pada situasi di mana dua pengembang telah memberikan kontribusi yang signifikan untuk tugas yang sama, misalnya perbaikan bug.

Masalah atribusi tidak akan menjadi masalah besar di lingkungan kerja karena manajer proyek akan mengetahui pekerjaan yang dilakukan pasangan, tetapi bagaimana jika dua kontributor open source memutuskan untuk memasangkan dan mengeluarkan beberapa kode ke proyek tertentu yang tidak tahu bahwa mereka bekerja sama. Adakah cara bagi sistem kontrol versi seperti Git untuk mengatribusikan patch tertentu ke beberapa pengembang?


10
Ini harus dibagi untuk setiap sistem kontrol versi.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Jawaban:


63
Commit title

Commit body

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

Satu masalah dengan pendekatan ini adalah Anda tidak dapat membuat kunci bertanda tangan untuk grup pengembang ini, jadi pada dasarnya Anda dapat menambahkan siapa pun ke daftar ini meskipun mereka tidak bekerja pada fitur dan Github akan memperlakukannya seolah-olah mereka melakukannya. Namun, ini seharusnya tidak menjadi masalah dalam banyak kasus.

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

Dengan penulis normal atau grup tanda tangan (metode lama) Anda akan melihatnya tidak ditandatangani dan tahu bahwa Anda tidak dapat mempercayai komit. Namun, tidak ada proses penandatanganan untuk rekan penulis.


Jawaban yang paling ketinggalan jaman:

Salah satu solusinya adalah dengan menetapkan nama untuk pasangan:

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

Berikut adalah laporan bug terkait dengan solusi sementara lainnya:

Bug git-core: Git harus mendukung banyak penulis untuk komit


1
Bagaimana jika Anda tidak tahu alamat email orang tersebut? Adakah cara untuk menautkan nama pengguna GitHub dll?
Aaron Franke

Jika mereka membuat komit sebelumnya, Anda dapat memeriksa bahwa:git show <COMMIT_ID> --format=email
Gerry

2
Ini sepertinya sudah bekerja di GitLab (lihat gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo

67

Konvensi git adalah menggunakan Co-Authored-By di akhir pesan komit ( kernel git: Konvensi Pesan Komit , mengacu pada Pesan Komit Openstack ). Ini juga salah satu solusi untuk bug git-core yang ditautkan dalam jawaban Gerry

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

Dalam komentar pada 5 Mei 2010, Josh Triplett juga menyarankan untuk menerapkan dukungan terkait di git.

Seperti yang ditunjukkan Llopis dalam sebuah komentar, GitHub mengumumkan dukungan untuk ini di blog mereka pada 29 Jan 2018: Berkomitmen bersama dengan rekan penulis ( detail ).


8
Ini sekarang didukung oleh GitHub.
llrs

@Llopis Baru saja melihat postingan blog dan datang ke sini untuk memperbarui jawaban saya. Senang melihat seseorang lebih cepat :)
Kariem

Saya menulis plugin git sederhana untuk mempermudah mengelola trailer yang ditulis bersama oleh ini secara otomatis: github.com/cac04/git-pair
c--

Pendekatan ini terlihat seperti sebuah kludge (lih. Cara Bazaar ). Dan ada penulis utama dengan cara ini, yang rekan penulisnya hanyalah tambahan, jika saya memahaminya dengan benar.
Ruslan

28

Untuk Bazaar:

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

Nama-nama tersebut akan ditampilkan di log secara terpisah dari nama pelaku.


20

git-pair

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

Skrip sederhana dari Pivotal ini untuk mengotomatiskan atribusi pemrograman pasangan Git.

Anda membuat .pairsfile seperti:

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

lalu:

git pair sp js

set:

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

untukmu.


13

git membedakan antara komit authordan committer[1]. Anda dapat menggunakannya sebagai solusi, mis. Tandatangani diri Anda sebagai the committerdan rekan penulis Anda sebagai author:

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

Dengan cara ini, Anda dan rekan penulis Anda akan tercatat di riwayat git. Berlari git log --format=fuller, akan memberi Anda sesuatu seperti:

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] Perbedaan antara penulis dan pelaku di Git?


4

Alternatifnya, ada proyek open source , yang saya kontributornya, di GitHub yang menyediakan cara yang baik untuk melakukannya dari baris perintah. Proyek ini membantu Anda menyetel alias untuk membuat komit otomatis bersama sebagai berikut:

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

Dengan menggunakan pendekatan ini, Anda dapat membuat komit yang ditulis bersama tanpa antarmuka grafis.


5
Dari apa yang saya lihat, ini adalah alias git yang menambahkan "Penulis bersama oleh:" ditambah "penulis bersama <co-author-email>" ke akhir pesan komit.
Kariem

3

Kami menambahkan nama kami ke setiap pesan komit di akhir sebagai konvensi misalnya: Implemented cool feature <Aneesh | Hiren>


4
Ini mirip dengan konvensi git yang Co-Authored-Bysaya sebutkan dalam jawaban terpisah
Kariem

2

Coba git-mob , kami membuatnya untuk menghubungkan penulis bersama pada komit.

Misalnya

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

1

Sebagian besar alat penulis bersama tidak mendukung pelengkapan otomatis. Anda dapat mencoba git-coco , yang ditulis dengan python3 (Saya pengembangnya). git-cocomendukung pelengkapan otomatis dan saran otomatis. Berikut ini adalah pelengkapan otomatis snapshot pada penulis sampel

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.