Làm cách nào để gán một cam kết duy nhất cho nhiều nhà phát triển?


120

Cách làm việc của tất cả các hệ thống kiểm soát phiên bản mà tôi quen thuộc là mỗi cam kết được quy cho một nhà phát triển duy nhất. Sự nổi lên của Kỹ thuật Agile, và cụ thể là lập trình theo cặp, đã dẫn đến tình huống mà hai nhà phát triển đã đóng góp đáng kể cho cùng một nhiệm vụ, ví dụ như một bản sửa lỗi.

Vấn đề phân bổ sẽ không phải là vấn đề quá lớn trong môi trường làm việc vì người quản lý dự án sẽ nhận thức được công việc mà các cặp đang làm, nhưng điều gì sẽ xảy ra nếu hai cộng tác viên nguồn mở quyết định ghép nối và đẩy ra một số mã cho một dự án cụ thể mà họ không biết họ đang làm việc cùng nhau. Có cách nào để hệ thống kiểm soát phiên bản như Git phân bổ một bản vá cụ thể cho nhiều nhà phát triển không?


10
Điều này nên được chia cho từng hệ thống kiểm soát phiên bản.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Câu trả lời:


63
Commit title

Commit body

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

Một vấn đề với phương pháp này là bạn không thể tạo khóa có chữ ký cho nhóm nhà phát triển này, vì vậy về cơ bản bạn có thể thêm bất kỳ ai vào danh sách này ngay cả khi họ không hoạt động trên một tính năng và Github sẽ coi điều đó như thể họ đã làm. Tuy nhiên, đây không phải là một vấn đề trong hầu hết các trường hợp.

ví dụ Co-authored-by: Linus Torvalds <torvalds@linux-foundation.org>

Với các tác giả hoặc nhóm ký thông thường (phương pháp cũ), bạn sẽ thấy nó chưa được ký và biết rằng bạn không thể tin tưởng vào cam kết. Tuy nhiên, không có quy trình ký kết về đồng tác giả.


Câu trả lời gần như đã lỗi thời:

Một giải pháp sẽ là đặt tên cho cặp:

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

Dưới đây là một báo cáo lỗi liên quan với các giải pháp tạm thời khác:

Lỗi git-core: Git nên hỗ trợ nhiều tác giả cho một cam kết


1
Còn nếu bạn không biết địa chỉ Email của người đó thì sao? Có cách nào để liên kết tên người dùng GitHub, v.v. không?
Aaron Franke

Nếu họ đã thực hiện cam kết trước đó, bạn chỉ cần kiểm tra:git show <COMMIT_ID> --format=email
Gerry

2
Điều này dường như đã hoạt động trong GitLab (xem gitlab.com/gitlab-org/gitlab-foss/merge_requests/17919 )
Meiogordo 17/09/19

67

Quy ước git là sử dụng Co-Authored-By ở cuối thông điệp cam kết ( git kernel: Các quy ước về thông điệp cam kết , đề cập đến Thông báo cam kết của Openstack ). Đây cũng là một trong những giải pháp cho lỗi git-core được liên kết trong câu trả lời của Gerry

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

Trong nhận xét đó vào ngày 5 tháng 5 năm 2010, Josh Triplett cũng đề xuất triển khai hỗ trợ tương ứng trong git.

Như Llopis đã chỉ ra trong một bình luận, GitHub đã thông báo hỗ trợ điều này trên blog của họ vào ngày 29 tháng 1 năm 2018: Cam kết cùng với các đồng tác giả ( chi tiết ).


8
Điều này hiện được hỗ trợ bởi GitHub.
llrs

@Llopis Chỉ cần xem bài đăng trên blog và vào đây để cập nhật câu trả lời của tôi. Tốt để xem ai đó đã nhanh hơn :)
Kariem

Tôi đã viết một plugin git đơn giản để giúp quản lý tự động các đoạn giới thiệu Đồng tác giả này dễ dàng hơn: github.com/cac04/git-pair
c--

Cách tiếp cận này trông giống như một k bùn (xem cách Bazaar ). Và có một tác giả chính theo cách này, mà các đồng tác giả chỉ là một phần bổ sung, nếu tôi hiểu nó một cách chính xác.
Ruslan

28

Đối với Bazaar:

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

Những tên đó sẽ được hiển thị trong nhật ký riêng biệt với tên người cam kết.


20

git-cặp

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

Tập lệnh đơn giản này từ Pivotal để tự động hóa phân bổ lập trình cặp Git.

Bạn tạo một .pairstệp như sau:

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

và sau đó:

git pair sp js

bộ:

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

cho bạn.


13

git phân biệt giữa một cam kết authorcommitter[1]. Bạn có thể sử dụng nó như một công việc xung quanh, ví dụ: ký tên mình là committervà đồng tác giả của bạn với tư cách là author:

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

Bằng cách này, cả bạn và đồng tác giả của bạn sẽ được ghi vào lịch sử git. Chạy git log --format=fuller, sẽ cung cấp cho bạn một cái gì đó như:

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] Sự khác biệt giữa tác giả và trình cam kết trong Git?


4

Ngoài ra, có một dự án mã nguồn mở , mà tôi là người đóng góp, trên GitHub cung cấp một cách tốt để thực hiện điều đó từ dòng lệnh. Dự án này giúp bạn đặt bí danh để tạo cam kết đồng tự động như sau:

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

Sử dụng phương pháp này, bạn có thể tạo cam kết đồng tác giả mà không cần giao diện đồ họa.


5
Từ những gì tôi có thể thấy, đây là một bí danh git có thêm "Đồng tác giả:" cộng với "đồng tác giả <co-author-email>" vào cuối thông báo cam kết.
Kariem

3

Chúng tôi thêm tên của chúng tôi vào mỗi thông báo cam kết ở cuối như một quy ước, ví dụ: Implemented cool feature <Aneesh | Hiren>


4
Điều này tương tự quy ước git Co-Authored-Bytôi đã đề cập trong một câu trả lời riêng biệt
Kariem

2

Hãy dùng thử git-mob , chúng tôi đã xây dựng nó để quy cho các đồng tác giả về cam kết.

Ví dụ

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

1

Hầu hết các công cụ đồng tác giả không hỗ trợ tính năng tự động hoàn thành. Bạn có thể thử git-coco , nó được viết bằng python3 (tôi là nhà phát triển). git-cocohỗ trợ tự động hoàn thành và tự động đề xuất. Đây là ảnh chụp nhanh tự động hoàn thành về các tác giả mẫu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.