Thuật ngữ cho một cam kết mã nguồn thực sự LỚN là gì? [đóng cửa]


37

Đôi khi, khi chúng tôi kiểm tra lịch sử cam kết của một phần mềm, chúng tôi có thể thấy rằng có một vài cam kết thực sự LỚN - họ có thể thay đổi 10 hoặc 20 tệp với hàng trăm dòng mã nguồn đã thay đổi (delta). Tôi nhớ rằng có một thuật ngữ thường được sử dụng cho cam kết LỚN như vậy nhưng tôi không thể nhớ chính xác thuật ngữ đó là gì. Ai giúp tôi với? Thuật ngữ mà các lập trình viên thường sử dụng để nói về cam kết LỚN và khổng lồ như vậy là gì?

BTW, có cam kết nhiều thay đổi cùng nhau là một thực tiễn tốt?

CẬP NHẬT: cảm ơn các bạn đã thảo luận đầy cảm hứng! Nhưng tôi nghĩ "bom mã" là thuật ngữ mà tôi đang tìm kiếm.


15
"Phá vỡ cam kết". :-)
Peter K.

3
Cá nhân tôi sẽ gọi một cam kết có kích thước đó làcluster f...
Ramhound

1
Ông chủ của tôi làm điều này tất cả các thời gian. Nhận xét đăng ký: "mọi thứ; o)"
MetalMikester

+1 cho câu hỏi vì tôi yêu mọi câu trả lời cho đến nay và đã phải chịu đựng ít nhất một trong những tội lỗi ít nhất một lần trong sự nghiệp và muốn người khác không làm điều đó =)
Patrick Hughes

Tôi có thể nói mã tuyết lở!
Brian

Câu trả lời:


50

(1) Ben Collins-Sussman : "..." bom mã ". Đó là, bạn sẽ làm gì khi ai đó xuất hiện trong một dự án nguồn mở với một tính năng mới khổng lồ phải mất hàng tháng để viết? Ai có thời gian để xem xét hàng ngàn dòng mã? ... "

(2) Dan Fabulich : "Bom mã, hoặc: Người mới với ý tưởng lớn ... Bom mã là một miếng vá lớn đến mức không ai có thể xem lại."

(3) Google Summer Code: Nguyên tắc : "Cam kết sớm, cam kết thường xuyên ... Vui lòng không làm việc cả ngày và sau đó đẩy mọi thứ ra trong một quả bom mã duy nhất . Thay vào đó, mọi cam kết chỉ nên khép kín trong một nhiệm vụ cần được tóm tắt trong thông điệp tường trình. "

(4) Jeff Atwood : "bom mã ... Quy tắc số 30: Đừng đi tối . ...


liên kết 2 và 4 liên kết trực tiếp và trích dẫn liên kết 1. Không có gì sai với khái niệm lan truyền, nhưng nó ít liên quan hơn một chút. Tôi thích thuật ngữ này, nhưng có vẻ như nó không theo kịp lắm.
haylem

1
Điều gì xảy ra nếu mã được cam kết là mã mới khá tách biệt với phần còn lại của dự án? Trong trường hợp này, tôi nghĩ rằng một cam kết lớn (gần như) đã hoàn thành và dọn sạch mã tốt hơn nhiều cam kết nhỏ buộc mọi người phải xem xét (1) sửa lỗi trung gian, (2) tái cấu trúc như đổi tên lớp, v.v. 3) mã sơ bộ cuối cùng sẽ bị xóa. Chỉ 2 xu của tôi.
Giorgio

Đây là loại lý do tôi chống lại việc viết lại /
nổi loạn

@Giorgio - đó là những gì các chi nhánh dành cho.
Brian

@Brian: Vâng, đó là một khả năng. Trong trường hợp này, bạn có một cam kết lớn trên nhánh chính khi bạn hợp nhất chức năng bạn đã phát triển trên nhánh.
Giorgio

38

Chúng tôi có thể gọi nó là một cam kết xấu . :)

Thực hành xấu

Và vâng, điều đó thường được coi là thực hành xấu , vì nó có những tác động tiêu cực của:

  • làm cho nó khó khăn để xem xét ,
  • làm cho khó nắm bắt dễ dàng và nhanh chóng mục đích ban đầu của cam kết ,
  • làm cho nó khó khăn để xem làm thế nào nó đã tác động đến mã để khắc phục hoặc giải quyết vấn đề một cách rõ ràng ,
  • làm cho khó biết liệu kích thước của cam kết có phải do tiếng ồn của những thay đổi có thể không liên quan khác không (ví dụ: dọn dẹp nhỏ hoặc các nhiệm vụ khác).

Các trường hợp được chấp nhận

Tuy nhiên, bạn có thể có trường hợp các cam kết lớn là hoàn toàn chấp nhận được . Ví dụ:

  • khi sáp nhập giữa các chi nhánh ,
  • khi thêm các nguồn mới từ một cơ sở mã không phiên bản khác,
  • khi thay thế một tính năng lớn tại chỗ (mặc dù bạn nên thực hiện điều đó trong một nhánh, với các cam kết nhỏ hơn giải quyết các phần khác nhau của thay đổi, sau đó hợp nhất lại toàn bộ, để bạn có thể có một cửa sổ tốt hơn về sự phát triển gia tăng của tính năng và các vấn đề có thể gặp phải trên đường đi),
  • khi tái cấu trúc một API ảnh hưởng đến nhiều lớp người tiêu dùng và hậu duệ.

Vì vậy, bất cứ khi nào có thể, hãy ưu tiên "tấn công phẫu thuật" - các loại cam kết (và liên kết chúng với ID nhiệm vụ trong trình theo dõi vấn đề của bạn!). Nếu bạn có một lý do hợp lệ, hãy tiếp tục.


Ngoài ra, tôi thực sự không biết và không nghĩ rằng tôi đã từng nghe một cái tên đặc biệt cho một cam kết lớn. Một quái vật cam kết? Một cam kết béo?

Cập nhật: Câu trả lời của David Cary liên kết với các diễn viên CNTT đáng chú ý bằng thuật ngữ "bom mã" (quan trọng nhất là Collins-Sussman, người sáng tạo ban đầu của Subversion ). Như vậy (mặc dù cho đến nay tôi không thể nói rằng tôi thường xuyên nghe thấy).


11
Một Godzilla cam kết! Eeeeeeeek !!!
Péter Török

@ PéterTörök: Thích nó. Hãy làm cho nó trở thành một xu hướng. Các tùy chọn khác: cam kết cá voi, cam kết Gargantuan hoặc khá đơn giản là BigFatCommit.
haylem

1
Vâng, "xấu" hoặc "muộn". Nếu không có tên cho công ty của bạn, hãy đặt tên theo tên nhà phát triển được đề cập. "Này anh chàng mới, đừng làm Jerry! Hãy cam kết sớm và thường xuyên cam kết."
chooban

Đừng làm một Jerry, đó là một cách tiếp cận hữu ích! Ngoài ra, cam kết lớn có thể bắt nguồn từ các nhà phát triển bị căng thẳng không tin hoặc không hiểu việc sử dụng phiên bản. Kiểm tra kiến ​​thức!
Độc lập

Nếu tên của ai đó là Jerry thì sao?
Loïc Faure-Lacroix

12

BTW, có cam kết nhiều thay đổi cùng nhau là một thực tiễn tốt?

Chà, thật không tốt khi giữ các thay đổi trong một thời gian dài và thực hiện nhiều tính năng và sửa lỗi, sau đó cam kết chúng, đó là một cách mà một cam kết lớn có thể xảy ra.

Một cách khác điều này có thể xảy ra là nếu tái cấu trúc thay đổi chữ ký của hàm được sử dụng rộng rãi, và sau đó tất cả những thứ đó phải được thay đổi. Điều này không hẳn là xấu và tôi không muốn các nhà phát triển kiềm chế làm sạch mã vì sợ vượt qua một số ngưỡng.

Vì vậy, có nhiều thứ hơn là chỉ nhìn vào số lượng tệp được chạm trong một cam kết.


5
Điều này. Điều thực sự quan trọng không phải là số lượng tệp được thay đổi, hoặc số lượng dòng thay đổi, mà là phạm vi của các thay đổi. Nếu bạn có thể mô tả ngắn gọn và chính xác tập hợp các thay đổi trong một thông điệp cam kết ngắn mà không bỏ sót điều gì, thì số lượng thay đổi vật lý là tương đối không quan trọng. Không quan trọng, nhưng bản thân tôi, tôi muốn có một cam kết lớn giữ mã có thể xây dựng được hơn là một tập hợp các cam kết trong đó chỉ một số trong số chúng dẫn đến một cây mã nguồn sẽ xây dựng (thay đổi chữ ký phương thức cf).
một CVn

8

Thuật ngữ tôi đã nghe là "kiểm tra chunky" . Và tôi không phải là một fan hâm mộ của họ. Tôi thích các cam kết nhỏ hơn để đảm bảo không có gì khác bị phá vỡ ở bước hợp lý trong một dự án. Các cam kết lớn nói chung thường đầy rẫy những vấn đề gây tiếng vang trong một thời gian khi điều đó xảy ra.


+1 vì tôi không nhớ rằng vào thời điểm đó (mặc dù tôi không nghĩ đó là một thuật ngữ chung chung hoặc tôi không biết về nó), nhưng tôi đã nghe thấy từ "chunk" được sử dụng đặc biệt bởi từ đồng nghĩa với một tiện ích mở rộng cho phép gửi một cam kết lớn với các khối dữ liệu khác nhau, nhưng ngoài ra tôi không nghĩ rằng tôi từng nghe thuật ngữ đó cho các cam kết nói chung.
haylem

Công ty tôi đã ở khi nhà phát triển sử dụng thuật ngữ đó đang sử dụng SourceGear Vault.
Jesse C. Choper

3

Tôi gọi đó là "cam kết SVN điển hình" hoặc "ngày mai là ngày phát hành cam kết"

Tôi yêu SVN rất nhiều, tôi đã bị tắt bởi thực tế là tôi không thể thực hiện các cam kết địa phương.

EDIT: họ thường có các từ "thứ" và "bia" trong thông điệp cam kết.

EDIT LẠI: Cam kết rất nhiều thay đổi, trong khi không nhất thiết là một thực hành xấu, nên tránh càng nhiều càng tốt. Tôi thấy dễ dàng hơn để xem xét sửa đổi / cam kết ngắn gọn và súc tích. (được ghép nối với một thông báo cam kết được viết tốt, xem bản chỉnh sửa trước đây của tôi để biết ví dụ xấu)



2
  • cam kết ban đầu - dự án không thuộc quyền kiểm soát sửa đổi được ném vào SVN
  • tái cấu trúc - kiến ​​trúc sư có ý tưởng tuyệt vời về việc thay đổi tên lớp từ / sang Công ước đặt tên Smurf hoặc thay đổi gốc của hệ thống phân cấp gói
  • định dạng mã - kiến trúc sư đã quyết định thay đổi thụt đang 4-3 chỗ hoặc kết thúc thay đổi dòng từ Unix Windows (hoặc trở lại)
  • Cam kết thứ Sáu - Joe luôn cam kết làm việc cả tuần vào thứ Sáu lúc 16:30
  • uuups cam kết - Ted đã vô tình xóa thư mục gốc, đã cam kết điều đó và bây giờ anh ấy lại bơm toàn bộ hệ thống phân cấp tệp vào SVN

0

Thông thường nhiều người có xu hướng thực hiện cam kết lớn bằng cách sử dụng VCS tập trung, đặc biệt là máy chủ thực thi chính sách cam kết tốt. Đó là cam kết phải vượt qua tất cả các bài kiểm tra và các bài kiểm tra mất nhiều thời gian hơn (dài hơn vài giây). Vì vậy, các nhà phát triển không muốn đợi quá lâu để cam kết nhiều lần và chia các thay đổi thành nhiều cam kết nhỏ.

Và các nhà phát triển có màu xanh đối với VCS có thể quên chia nhỏ các thay đổi thành nhiều cam kết nhỏ. Họ chỉ nhớ cam kết khi họ phát hành chương trình cho nhóm QA. Tệ hơn nữa, để tránh những người khác nhìn thấy mã lỗi, họ không cam kết trước khi vượt qua thử nghiệm QA thành công. Cuối cùng, họ đã không nhận ra rằng họ đã cam kết các tệp nhị phân đầu ra, các tệp tạm thời và đầu ra của trình liên kết, thực sự tạo ra các cam kết "lớn".

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.