วิธีการระบุการกระทำเดียวกับนักพัฒนาหลายคน?


120

วิธีการทำงานของระบบควบคุมเวอร์ชันทั้งหมดที่ฉันคุ้นเคยคือการคอมมิตแต่ละครั้งเกิดจากผู้พัฒนารายเดียว การเพิ่มขึ้นของ Agile Engineering และการเขียนโปรแกรมแบบจับคู่โดยเฉพาะได้นำไปสู่สถานการณ์ที่นักพัฒนาสองคนมีส่วนร่วมสำคัญในงานเดียวกันเช่นการแก้ไขข้อบกพร่อง

ปัญหาของการระบุแหล่งที่มาจะไม่เป็นเรื่องใหญ่มากเกินไปในสภาพแวดล้อมการทำงานเนื่องจากผู้จัดการโครงการจะทราบถึงงานที่ทั้งคู่กำลังทำอยู่ แต่ถ้าผู้ร่วมให้ข้อมูลโอเพนซอร์สสองรายตัดสินใจจับคู่และส่งโค้ดออกมา กับโปรเจ็กต์เฉพาะที่ไม่รู้ว่ากำลังทำงานร่วมกัน มีวิธีใดบ้างที่ระบบควบคุมเวอร์ชันเช่น Git จะระบุแพตช์เฉพาะสำหรับนักพัฒนาหลายคน


10
ควรแยกสิ่งนี้สำหรับระบบควบคุมแต่ละเวอร์ชัน
Ciro Santilli 郝海东冠状病六四事件法轮功

คำตอบ:


64
Commit title

Commit body

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

ปัญหาอย่างหนึ่งของแนวทางนี้คือคุณไม่สามารถสร้างคีย์ที่ลงนามสำหรับกลุ่มผู้พัฒนานี้ได้ดังนั้นคุณจึงสามารถเพิ่มใครก็ได้ในรายการนี้แม้ว่าพวกเขาจะไม่ได้ทำงานกับฟีเจอร์ใดก็ตามและ Github จะปฏิบัติกับมันราวกับว่าพวกเขาทำ อย่างไรก็ตามนี่ไม่ควรเป็นปัญหาในกรณีส่วนใหญ่

เช่น Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

สำหรับผู้เขียนปกติหรือกลุ่มการลงนาม (วิธีการเดิม) คุณจะเห็นว่าไม่มีการลงนามและรู้ว่าคุณไม่สามารถเชื่อถือการกระทำได้ อย่างไรก็ตามไม่มีกระบวนการลงนามในผู้เขียนร่วม


คำตอบที่ล้าสมัยส่วนใหญ่:

ทางออกหนึ่งคือการตั้งชื่อสำหรับคู่:

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

นี่คือรายงานข้อบกพร่องที่เกี่ยวข้องพร้อมวิธีแก้ไขปัญหาชั่วคราวอื่น ๆ :

Bug git-core: Git ควรสนับสนุนผู้เขียนหลายคนสำหรับการคอมมิต


1
แล้วถ้าคุณไม่ทราบที่อยู่อีเมลของบุคคลนั้นล่ะ? วิธีใดในการเชื่อมโยงชื่อผู้ใช้ GitHub ฯลฯ
Aaron Franke

หากพวกเขาทำข้อตกลงก่อนหน้านี้คุณสามารถตรวจสอบได้ว่า:git show <COMMIT_ID> --format=email
Gerry

2
ดูเหมือนว่าจะใช้งานได้ใน GitLab แล้ว (ดูgitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo

67

หลักการคอมไพล์คือการใช้Co-Authored-Byในตอนท้ายของข้อความคอมมิต ( git kernel: Commit Message Conventionsอ้างถึงOpenstack Commit Messages ) นี่เป็นหนึ่งในวิธีแก้ปัญหาเกี่ยวกับบั๊ก git-core ที่เชื่อมโยงในคำตอบของ Gerry

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

ในความคิดเห็นนั้นเมื่อวันที่ 5 พฤษภาคม 2010 Josh Triplett ยังแนะนำให้ใช้การสนับสนุนที่เกี่ยวข้องในคอมไพล์

ดังที่Llopisชี้ให้เห็นในความคิดเห็น GitHub ประกาศการสนับสนุนสำหรับสิ่งนี้ในบล็อกของพวกเขาเมื่อวันที่ 29 มกราคม 2018: Commit ร่วมกับผู้เขียนร่วม ( รายละเอียด )


8
ขณะนี้GitHub รองรับแล้ว
ติดตาม

@Llopis เพิ่งเห็นบล็อกโพสต์และมาที่นี่เพื่ออัปเดตคำตอบของฉัน
ดีใจที่

ฉันเขียนปลั๊กอิน git ง่ายๆเพื่อให้ง่ายต่อการจัดการรถพ่วงที่เขียนร่วมโดยอัตโนมัติเหล่านี้: github.com/cac04/git-pair
c--

แนวทางนี้ดูเหมือนกากตะกอน ( เปรียบเทียบทางบาซาร์ ) และมีผู้เขียนหลักด้วยวิธีนี้ซึ่งผู้เขียนร่วมเป็นเพียงส่วนเพิ่มเติมถ้าฉันเข้าใจถูกต้อง
Ruslan

28

สำหรับ Bazaar:

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

ชื่อเหล่านั้นจะแสดงในบันทึกแยกจากชื่อคอมมิทเตอร์


20

git คู่

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

สคริปต์ง่ายๆนี้จาก Pivotal เพื่อทำให้การระบุแหล่งที่มาการเขียนโปรแกรมคู่ Git โดยอัตโนมัติ

คุณสร้าง.pairsไฟล์เช่น:

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

แล้ว:

git pair sp js

ชุด:

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

สำหรับคุณ.


13

git แยกความแตกต่างระหว่างการกระทำauthorและcommitter[1] คุณสามารถใช้มันเป็นวิธีแก้ปัญหาเช่นลงชื่อตัวเองเป็นcommitterและผู้เขียนร่วมของคุณเป็นauthor:

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

ด้วยวิธีนี้ทั้งคุณและผู้เขียนร่วมของคุณจะถูกบันทึกไว้ในประวัติคอมไพล์ วิ่งgit log --format=fullerจะให้สิ่งที่ชอบ:

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?


4

หรือมีโครงการโอเพ่นซอร์สซึ่งฉันเป็นผู้มีส่วนร่วมใน GitHub ซึ่งเป็นวิธีที่ดีในการดำเนินการจากบรรทัดคำสั่ง โปรเจ็กต์นี้ช่วยคุณในการตั้งนามแฝงเพื่อสร้างคอมมิตที่สร้างร่วมกันดังนี้:

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

ด้วยวิธีนี้คุณจะสามารถสร้างการคอมมิตที่เขียนร่วมกันได้โดยไม่ต้องใช้อินเทอร์เฟซแบบกราฟิก


5
จากสิ่งที่ฉันเห็นนี่คือนามแฝง git ที่เพิ่ม "เขียนร่วมโดย:" บวกกับ "ผู้เขียนร่วม <co-author-email>" ต่อท้ายข้อความคอมมิต
Kariem

3

เราเพิ่มชื่อของเราในแต่ละข้อความการกระทำในตอนท้ายตามแบบการประชุมเช่น: Implemented cool feature <Aneesh | Hiren>


4
สิ่งนี้คล้ายกับการประชุมคอมไพล์ที่Co-Authored-Byฉันพูดถึงในคำตอบแยกต่างหาก
Kariem


1

เครื่องมือผู้เขียนร่วมส่วนใหญ่ไม่รองรับการเติมข้อความอัตโนมัติ คุณสามารถลองใช้git-cocoซึ่งเขียนด้วย python3 (ฉันเป็นผู้พัฒนา) git-cocoรองรับการเติมข้อความอัตโนมัติและคำแนะนำอัตโนมัติ นี่คือการเติมสแน็ปช็อต อัตโนมัติสำหรับผู้เขียนตัวอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.