Bạn có thể giới thiệu một mẫu / hướng dẫn thông điệp cam kết tốt để thực thi trong công ty không? [đóng cửa]


38

Trong Git, có thể thiết lập và thực thi một mẫu cam kết tốt.

Bạn có thể đề xuất (tốt nhất là với lập luận) một mẫu / hướng dẫn cam kết tốt để thực thi trong công ty không?

Câu trả lời:


42

tôi sử dụng

[Abc]: Message.

Với Add, Mod (ify), Ref (diễn xuất), Fix, Rem (ove) và Rea ​​(khả năng) thì thật dễ dàng để trích xuất logfile.

Thí dụ :

Add: New function to rule the world.  
Mod: Add women factor in Domination.ruleTheWorld().  
Ref: Extract empathy stuff to an abstract class.  
Fix: RUL-42 or #42 Starvation need to be initialised before Energy to avoid the nullpointer in People.  
Rem: freeSpeech is not used anymore.  
Rea: Removed old TODO and extra space in header.  

Nếu tôi có nhiều hơn một dòng, tôi sắp xếp chúng với quan trọng nhất trước tiên.


1
+1 Đó là một cách hay để đối phó với nó và bạn có thể dễ dàng grep cho các thay đổi.
Sardathrion - Phục hồi Monica

12
Kinh tế! Bạn đã lấy đi lời nói miễn phí!
CaffGeek

1
Bạn có thể vui lòng giải thích một số khác biệt giữa ModRef? Đôi khi tôi chỉ thực hiện các sửa chữa nhỏ đó là một số loại tái cấu trúc.
yegle

2
@yegle Modlà về việc thêm một cái gì đó hoặc thay đổi một hành vi, Reflà về việc thay đổi nội dung không thêm bất kỳ tính chất giả mạo nào, thêm API, v.v. Ví dụ: nếu tôi có một add(Object)chức năng và tôi thực hiện một add(List<Object>)chức năng, tôi sẽ nhận xét Mod. Sau đó tôi loại bỏ trùng lắp và sử dụng trực tiếp add(Object)trong add(List<Object>)sau đó tôi sẽ sử dụng Ref.
rangzen

14

Chúng tôi sử dụng như sau:

[Id của Ticket trong JIRA]: [Tin nhắn: Đã làm gì] Ví dụ - ABC-123: Đã thêm khả năng định cấu hình bản trình bày cho từng vùng.

Trong trường hợp này với sự tích hợp phù hợp, bạn sẽ có thể nhận được các tập tin thay đổi / xóa / thêm vào trong trình theo dõi vấn đề của bạn. Tuy nhiên, lưu ý rằng bạn nên ngăn thứ gì đó như ABC-123: Xong hoặc ABC-123: Đã sửa với các bộ lọc nếu có thể.


+1 để sửa lỗi nhưng những tính năng mới thì sao? Trừ khi tất cả các tính năng mới được tạo ra trong JIRA ...
Sardathrion - Phục hồi Monica

3
@Sardathrion - Cá nhân tôi sẽ tạo trình theo dõi cho chức năng mới trong JIRA. Chúng tôi làm điều này với Bugzilla và nó mang lại cho nhóm thử nghiệm (và mọi người khác) khả năng hiển thị tốt mọi thứ được đưa vào bản phát hành và giảm thiểu mọi thứ đi ra ngoài khi chúng chưa được kiểm tra / đánh giá mã / bất cứ điều gì.
Jon Hopkins

@JonHopkins: Mặc dù trình theo dõi lỗi có thể được sử dụng cho các tính năng mới, nhưng nó có thể không phải là công cụ lý tưởng. Tất nhiên, số dặm của bạn sẽ thay đổi ^ _ ~
Sardathrion - Phục hồi Monica

3
Tôi rất thích có một vé được chỉ định cho mọi cam kết (dĩ nhiên một số vé có thể có nhiều cam kết): đó là cách rất đơn giản để có thêm thông tin cơ bản khi kiểm tra mã sau này. "Tại sao họ làm điều đó?" dễ dàng hơn nhiều để trả lời khi bạn có nhận xét cam kết mục theo dõi vấn đề.
Joachim Sauer

Không phải là tốt hơn để làm một vé trên một chi nhánh riêng biệt?
Tamás Szelei

11

Có một quy tắc đơn giản, đó là quy ước được theo sau bởi nhiều SCM (nếu không phải tất cả) và bởi hầu hết các công cụ hoạt động với SCM:

Dòng đầu tiên của một thông điệp cam kết là một bản tóm tắt ngắn, trong khi phần còn lại của thông điệp chứa các chi tiết.

Vì vậy, hầu hết các công cụ chỉ hiển thị dòng đầu tiên và hiển thị toàn bộ tin nhắn theo yêu cầu.

Một lạm dụng điển hình của thông điệp cam kết là một danh sách các thay đổi (chỉ viên đạn đầu tiên sẽ được hiển thị). Một lạm dụng khác là viết một tin nhắn chi tiết loooong trên một dòng duy nhất.

Vì vậy, nếu có một điều bắt buộc, tôi sẽ nói đó là độ dài tối đa của dòng đầu tiên.


Tôi chưa bao giờ thấy một lý do để viết một thông điệp cam kết chi tiết dài trong Git cả. Thông tin chi tiết có trong trình theo dõi vấn đề và do đó, thông điệp cam kết của tôi chỉ là mô tả một câu về thay đổi (nhỏ) mà tôi đã thực hiện trong cam kết đó.
Marnen Laibow-Koser

9

Cá nhân tôi chưa bao giờ thấy một mẫu cam kết chung đáng sử dụng. Nhận xét cần nói chính xác những gì các cam kết có liên quan đến, ví dụ như tính năng / sửa lỗi hoặc tuyên bố ngắn gọn về lý do thay đổi được thực hiện.

Thông tin về những gì đã cam kết không nên được đưa vào, điều này có thể được xác định bởi hệ thống scm. Thông tin thêm về lỗi / tính năng thuộc về nơi từng lỗi và tính năng được theo dõi.

Khi cập nhật báo cáo lỗi sau khi cam kết, tôi thấy cũng tốt khi nêu bản sửa đổi cam kết cùng với các nhận xét trong báo cáo lỗi. Bằng cách này, bạn có thể tìm đường từ nhận xét cam kết đến báo cáo lỗi và đối với mỗi nhận xét về báo cáo lỗi, bạn có thể tìm thấy những gì đã cam kết, nhưng bạn không sao chép thông tin bằng cách đưa nó vào cả báo cáo lỗi và thông báo cam kết.

Sau đó, khi xem lịch sử sửa đổi cho một tệp, bạn có các thông báo ngắn gọn mô tả lịch sử nhưng cũng biết nơi để tìm thêm chi tiết báo cáo lỗi hoặc mô tả nhiệm vụ để biết thêm chi tiết.


4
Nhiều công cụ lỗi sẽ cho phép bạn liên kết trực tiếp đến sửa đổi trong công cụ SCM của bạn nếu bạn nhập chi tiết theo đúng định dạng. Tương tự, nhiều công cụ SCM sẽ liên kết trực tiếp đến cơ sở dữ liệu lỗi nếu bạn nhập chi tiết lỗi theo đúng định dạng. IMO, miễn là bạn làm điều này, thì bạn là vàng.
Dean Harding

4

Trong Git, có thể thực thi gần như mọi thứ với móc Git . Kiểm tra các ví dụ trong .git / hook để biết ý tưởng.

Đối với tin nhắn, trong một trường hợp rất chung chung, bạn muốn bao gồm đủ thông tin về vấn đề bạn đang giải quyết VÀ chính giải pháp để có thể tìm và xác định cam kết này sau. Trong hầu hết các trường hợp, sự cố sẽ được tham chiếu số lỗi (tích hợp đúng với hệ thống theo dõi lỗi của bạn). Nếu bạn có các hệ thống khác, quy trình của bạn tích hợp với (như hệ thống theo dõi đánh giá mã), cũng bao gồm các bit thích hợp:

Extracted checking foobar range from bar() into foo(min, max) to re-use
in yadda() and blah(). foo() returns true if foobar is in the
specified range and false otherwise.

BugID: 123456
ReviewedBy: mabuddy
AutomergeTo: none

NHƯNG bạn muốn giữ nó đơn giản. Nếu không, mọi người sẽ tìm cách gian lận hệ thống và tạo ra các thông điệp cam kết vô dụng.


0

Chúng tôi sử dụng một mẫu có chứa

  • Số id của lỗi / tính năng / sửa lỗi
  • Có / không mô tả liệu mã có được kiểm tra hay không
  • Và một phần chi tiết cho một mô tả ngắn về ý định của cam kết

Hai cái đầu tiên được bỏ qua hầu hết thời gian (đôi khi cả ba) vì vậy nó không thực sự là một vấn đề lớn.


0

Tôi thường có mã định danh trong hệ thống theo dõi vé tôi sử dụng hoặc tổng quan cấp cao làm dòng đầu tiên. Sau đó, tôi có điểm "viên đạn" của mục thay đổi cụ thể trong cam kết. Vì vậy, tôi có thể một cái gì đó như:

MyVideoGameProject-123 OR Inventory System Improvements
Made inventory GUI drap and drap
Added ability to have multiple bag slots to expand inventory capacity

Đây là định dạng cam kết sạch nhất mà tôi thích. Nó là trực tiếp và đến điểm. Một lý do khác khiến tôi làm theo cách này là nếu tôi muốn tạo nhật ký thay đổi, tôi có thể lấy tất cả các thông điệp cam kết và phân tích nó thành nhật ký thay đổi rất dễ dàng.


0

[TicketId] [ABC] [topicId] [WIP] Tin nhắn, trong đó:

  • TicketId - id của một mục trong kho nhiệm vụ
  • ABC - thêm (tính năng), sửa lỗi (sửa lỗi), str (cấu trúc), dep (phụ thuộc) rem (không tương thích ngược / loại bỏ), rea (khả năng đọc), ref (tái cấu trúc)
  • topicId - có thể là một công cụ chọn công việc cho jenkins và / hoặc tên chi nhánh và / hoặc tên chủ đề cho gerrit
  • WIP - hoạt động trong tiến trình / hoặc không (nghĩa là Tích hợp liên tục có thể yêu cầu điều này)
  • tin nhắn - chi tiết sửa đổi

Ví dụ:
[# 452567] [add] [menu_item] mục mới - sổ lưu bút
[# 452363] [fix] [banner_top] [WIP] 1024x300 có thể được sử dụng ngay bây giờ
[# 452363] [fix] [banner_top] 500x200 có thể được sử dụng ngay bây giờ
[ # 452713] [rem] [trang] quảng cáo giữa bên trái


Câu trả lời của bạn sẽ mạnh mẽ hơn nếu bạn giải thích lý do tại sao bạn cảm thấy đây là một định dạng tốt như vậy. Mặc dù giá trị của định dạng này có thể là hiển nhiên đối với bạn, nhưng giá trị của nó không rõ ràng đối với người khác.

cảm ơn vì nhận xét - vâng tôi sẽ giải thích chi tiết hơn sớm - tôi chỉ muốn bắt đầu bằng một sự thật - sẽ là một tính năng ngăn xếp tốt mà bạn có thể ký câu trả lời với WIP :)
laplasz

Đối với 'Công việc đang tiến triển' - đây có phải là một lưu ý cho bạn rằng bạn sẽ quay lại và sửa đổi, hoặc bạn có cam kết làm chủ với điều này không? Nếu vậy, tại sao?
JBRWilkinson

Quy trình làm việc của CI có thể yêu cầu nó - vì vậy bạn cố gắng làm chủ thay đổi chưa hoàn thành chỉ để tích hợp nó càng sớm càng tốt
laplasz
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.