Một tin nhắn cam kết git có nên đề cập đến tập tin đã được sửa đổi?


50

Trong dòng đầu tiên của thông báo cam kết git, tôi có thói quen đề cập đến tệp đã sửa đổi nếu thay đổi không bao trùm nhiều tệp, ví dụ:

Add [somefunc] to [somefile] 

Đây có phải là một điều tốt để làm hoặc nó không cần thiết?

Câu trả lời:


84

Các công cụ kiểm soát phiên bản đủ mạnh để cho phép người xem xem các tệp nào đã được sửa đổi và phương pháp nào đã được thêm vào. Điều đó có nghĩa là nói chung, các thông điệp tường trình trùng lặp rõ ràng những gì đã tồn tại đang gây ô nhiễm nhật ký.

Bạn đã thêm somefuncphương thức để thực hiện một yêu cầu, nghĩa là:

  • để thêm một tính năng,
  • để loại bỏ một lỗi hoặc
  • để cấu trúc lại mã nguồn.

Điều này có nghĩa là các thông điệp tường trình của bạn phải giải thích các tính năng / lỗi bị ảnh hưởng hoặc mục đích của việc tái cấu trúc là gì.


5
Nó cũng nên nói về lý do tại sao . Những lựa chọn khác bạn đã xem xét, và tại sao bạn chọn cái này?
Jay Bazuzi

2
Tôi nhận xét về các cam kết giống như cách tôi sẽ nhận xét mã, chỉ từ góc độ cấp cao hơn (nghĩa là ít thông tin hơn, tóm tắt nhiều hơn). Cá nhân, tôi chia nó thành cấp độ tệp / mô-đun (tính bằng git) nhưng chỉ vì các cam kết rẻ tiền và tôi thích có thể đọc lịch sử như một cuốn sách. YMMV.
Evan Plaice

1
Nếu vì một lý do nào đó, người đó thực hiện một loạt các tệp cùng một lúc không liên quan đến cùng một lỗi, tôi thích họ liệt kê tên tệp và id lỗi trước khi triệu tập. Tôi không cần biết file.cpp: đã thêm getMethod (), nhưng tôi muốn lỗi id # 10 file.cpp: summery ở đây. Nếu họ cam kết một loạt các tệp được phát tán trên nhiều báo cáo lỗi, chúng tôi sẽ có một cuộc nói chuyện, bởi vì tôi không thực sự thích điều đó. Tôi muốn thay vì họ thực hiện nhiều cam kết. Một cho mỗi vấn đề họ đang giải quyết.
William

@William: Ngoài ra, trong trường hợp có một vấn đề với một sửa lỗi, có thể hoàn nguyên nó với sự phiền phức tối thiểu. Kết hợp mười sửa lỗi trong một lần cam kết và đó có thể là một vấn đề nghiêm trọng.
David Thornley

59

Không. Có rất nhiều cách để kiểm tra nội dung của một cam kết. Các bình luận nên mô tả mục đích của cam kết.


30

Đừng quên thêm VÉ / SỐ ISSUE .

Nếu bạn có bất kỳ tính năng hoặc hệ thống theo dõi vấn đề nào với vé # hoặc vấn đề # , hãy chắc chắn đặt ID # đó vào cam kết. Điều đó sẽ giúp bất cứ ai muốn biết thêm về tính năng hoặc vấn đề mà bạn đang làm việc.

Trong dự án cuối cùng của tôi, có một macro được phát triển để đảm bảo rằng 7 chữ số đầu tiên của nhận xét là số vấn đề hợp lệ từ nhiệm vụ rõ ràng (hệ thống theo dõi vấn đề / tính năng của chúng tôi).


Làm thế nào để bạn cam kết thay đổi tái cấu trúc, sau đó?
Jules

@Jules tái cấu trúc có một vé # không bao giờ kết thúc
Caleth

@Jules một phương pháp là tái cấu trúc được theo dõi như một loại vấn đề "việc vặt" và do đó nó cũng có một số vấn đề.
Scott McIntyre

@ScottMcIntyre Mặc dù điều này có thể đúng nhưng tôi không tin đó là một ý tưởng hay. Tái cấu trúc thường được thực hiện tốt nhất theo cơ hội hoặc là một phần của quá trình phát triển mã dựa trên mã được tái cấu trúc. Như Fowler nói , "Tái cấu trúc theo kế hoạch là [...] một dấu hiệu cho thấy nhóm đã không thực hiện đủ phép tái cấu trúc bằng cách sử dụng các quy trình công việc khác". Hay nói thẳng hơn là Ron Jeffries: Tái cấu trúc - Không tồn đọng! .
Jules

3

Tôi thực hiện kiểu đó khi tôi cam kết, ví dụ như sửa lỗi cho một lỗi yêu cầu thay đổi thành nhiều tệp. Điều này làm cho nó dễ dàng hơn một chút để nói những gì thực sự thay đổi mà không cần xem các tệp riêng lẻ trong tập thay đổi.

Đối với thay đổi tập tin duy nhất, điều này là không cần thiết.

Dòng đầu tiên luôn là một mô tả cấp cao về bộ thay đổi, giống như một liên kết đến lỗi hoặc câu chuyện người dùng.


3

Nếu đó là thông tin liên quan trong tường thuật của thông điệp cam kết, thì có, bao gồm nó. Nếu bit thông tin duy nhất là tên tệp, thì không.

Ví dụ: điều này có ý nghĩa: "Đã chuyển hàm build_foo () từ fooutil.c sang foobase.c, vì hầu hết các chương trình muốn sử dụng build_foo () đều đã bao gồm foobase.c"

Cái này không: "Đã cập nhật build_foo () trong fooutil.c để lấy tham số thanh."


1

Tôi muốn thêm một góc nhìn khác ở đây.

Câu trả lời của tôi là Có hoặc Không. Nhưng nói chung tôi sẽ nói Có.

Kiểm soát phiên bản thực sự đủ mạnh để biết tập tin nào đang được cập nhật. Nhưng, khi chúng ta làm

$ git log

Chúng tôi chỉ thấy thông điệp cam kết. Đó là những gì hầu hết mọi người làm.

Bằng cách nhìn vào nhật ký chính nó. Nó thêm bối cảnh bổ sung cho nó. Ví dụ:

readme.md: Fix typo detected by language tool

Tốt hơn

Fix typo detected by language tool

Tuy nhiên, nếu thay đổi sinh ra nhiều tệp, thì ít nhất hãy đề cập đến thành phần đang được chỉnh sửa.

API: Fix reset password not sent email to user

Bằng cách đọc nó, chúng tôi biết rằng lỗi đang được sửa là ở thành phần API và có lẽ nó nằm trong thư mục API tại cơ sở mã.

Tuy nhiên chúng ta có thể làm

$ git show COMMIT_ID --name-only 

nhưng nó thêm nhiều bước chỉ để có được các tập tin.


0

Lần duy nhất tôi có thể thấy điều này hữu ích cho một lần kiểm tra tệp là nếu bạn đã thay đổi một chức năng được sử dụng ở nhiều nơi trong tệp với kết quả là diff bị lộn xộn. Thậm chí sau đó tôi sẽ đặt trình theo dõi thay đổi # và mô tả văn bản đơn giản về thay đổi trước tiên.


-1

Tôi nghĩ rằng câu hỏi thực sự ở đây là giới hạn phạm vi của bạn như thế nào? Nếu bạn chờ đợi để thực hiện một loạt các thay đổi không liên quan với nhau trong một cam kết, thì bạn có thể cảm thấy cần phải chỉ định các tệp đã được thay đổi cho mục đích gì.

Tuy nhiên, nếu bạn chỉ đơn giản thực hiện các cam kết hẹp hơn thường xuyên hơn, thì một cam kết duy nhất sẽ giải thích các tệp nào đã được sửa đổi và bạn có thể mô tả đơn giản mục đích trong thông báo là gì.

Cam kết nhiều hơn, thường xuyên hơn. Đó là cách bạn có thể tránh quá dài dòng trong tin nhắn của mình.


-2

Nó không nên

Mọi người quan tâm có thể thấy những thay đổi trong lịch sử

Điều này cũng không khả thi trong các hệ thống lớn hơn vì nhiều tệp có thể được tạo tự động

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.