Kiểm soát phiên bản nên chứa mã và cấu hình cần thiết để xây dựng ứng dụng.
Điều này có nghĩa rằng:
Nội dung tạm thời được giới thiệu trong một khoảng thời gian ngắn (thời gian cần thiết để xác định vị trí của lỗi hoặc để thử nghiệm tính năng của ngôn ngữ chẳng hạn) không nên có trong kiểm soát phiên bản: giữ nguyên cho đến khi bạn cần nó, sau đó chỉ cần loại bỏ nó khi thực hiện cam kết .
Các tệp cục bộ phù hợp với một máy cụ thể có thể được lưu giữ trong một nhánh.
Tôi sẽ tránh giữ chúng chỉ cục bộ, vì quá đau đớn để làm lại tất cả những thứ này khi máy tính xách tay của bạn bị đánh cắp hoặc virus buộc bạn phải cài đặt lại hệ điều hành (và nhân tiện, bạn thấy rằng bản sao lưu cuối cùng của bạn đã được thực hiện hai năm trước) .
Mặt khác, hãy cẩn thận với cấu trúc tệp: cấu hình cục bộ là OK, cho đến khi nó trở nên quá tải và buộc bạn phải thực hiện một thay đổi duy nhất trong mỗi tệp của mỗi 42 nhà phát triển tham gia dự án.
Theo dõi cơ hội để loại bỏ các đặc tính giữa các máy. Nó có thể có nghĩa là:
Cấp quyền truy cập vào máy chủ dev SQL để thay thế các phiên bản cục bộ trên các máy của nhà phát triển,
Sử dụng dịch vụ phân phối gói như Pypi hoặc NPM đối với các gói công cộng và các đối tác tư nhân của họ đối với các gói trong nhà,
Yêu cầu các thành viên của nhóm cài đặt các phiên bản phần mềm giống nhau,
Thực hiện cập nhật phần mềm càng minh bạch càng tốt,
Hoặc cho phép triển khai HĐH và phần mềm cần thiết trên máy chỉ bằng một cú nhấp chuột (cộng với thời gian để mọi nhà phát triển cài đặt Vim so với Emacs, Chrome so với Firefox, v.v.)
Vì thế:
Hồ sơ dự án. Các đường dẫn có thể cần được chỉnh sửa để phản ánh bố cục trên PC hiện tại.
Tại sao không sử dụng cùng một bố cục trên mọi PC? Các đường dẫn trong dự án nên liên quan đến tệp dự án, điều đó có nghĩa là không quan trọng dự án nằm ở đâu. Các phiên bản của phần mềm và thư viện tốt hơn là giống nhau để tránh các lỗi khó hiểu chỉ xuất hiện trên một số máy và không thể sao chép cho các thành viên khác trong nhóm.
Thí dụ:
Trong một dự án được tạo bằng Visual Studio, bạn có thể tìm thấy:
Các tập tin chính họ. Đường dẫn là tương đối, không quan trọng cho dù trên máy của tôi, dự án được đặt trong H:\Development\Hello World Project\
khi các thành viên khác trong nhóm đã kiểm tra dự án C:\Work\HelloWorld\
.
Các phụ thuộc, tức là thư viện bên thứ ba và trong nhà. Cả hai loại nên được xử lý bởi NuGet, điều này làm cho tất cả các cuộc thảo luận liên quan đến xung đột trở nên lỗi thời. Nếu bạn không có cùng phiên bản thư viện tôi có, hãy yêu cầu NuGet cập nhật các phụ thuộc. Đơn giản như vậy (khi nó hoạt động tốt, không phải lúc nào cũng như vậy).
Lưu ý rằng điều quan trọng là phải giữ các thư viện nội bộ trong NuGet riêng. Có một loạt các thư viện được lưu trữ trong một thư mục dùng chung hoặc được gửi qua e-mail trên một nhóm dẫn đến các máy chủ CI vô chính phủ và trầm cảm.
Các thiết lập. Điều quan trọng là nhóm chia sẻ các cài đặt tương tự. Nếu một nửa nhóm quyết định coi các cảnh báo là lỗi và một nửa nhóm giữ cảnh báo như hiện tại, các thành viên của phần đầu tiên của nhóm sẽ dành thời gian để loại bỏ các cảnh báo do các nhà phát triển tạo ra từ phần thứ hai của nhóm.
Các cài đặt liên quan đến tiện ích. Đó là những điều khó khăn, bởi vì một số thành viên của nhóm có thể đã cài đặt một số tiện ích, trong khi những người khác thì không.
Chúng tôi khuyên bạn nên cài đặt bộ công cụ tương tự. Nếu một số lập trình viên muốn sử dụng StyleCop, nhưng những người khác thì không, nhóm sẽ không hoàn thành công việc. Nếu một số sử dụng hợp đồng Mã nhưng những người khác thì không, họ sẽ có cùng các vấn đề.
Makefiles. Ví dụ tối ưu hóa có thể cần phải tắt trong quá trình gỡ lỗi, nhưng không phải cho máy chủ CI.
Giữ một số makefile trong kiểm soát phiên bản. Nó không phải là bất thường để xây dựng một phiên bản gỡ lỗi trên máy chủ CI và để đẩy nó đến một máy khách gặp lỗi khó khăn.
Những cái hack xấu xí bẩn thỉu. Ví dụ trả về 7 ở giữa một hàm, để kiểm tra một cái gì đó, tùy thuộc vào hàm và bị nghi ngờ phá vỡ ở giá trị 7.
Tôi sẽ tránh mã như vậy ở nơi đầu tiên. Để kiểm tra một cái gì đó, sử dụng các bài kiểm tra đơn vị. Nếu nó thực sự mất vài giây để trao đổi một số mã cho mục đích gỡ lỗi , thì hãy thực hiện nó, nhưng dù sao bạn cũng sẽ xóa mã này trong vài phút, do đó không cần phải cam kết.
Khi bạn mô tả nó, bạn nên viết một bài kiểm tra. Ví dụ: nếu bạn muốn chắc chắn rằng:
class TemperatureConverter
{
public int CelsiusToFahrenheit(int temperature)
{
...
}
}
ném một ngoại lệ khi temperature
kém hơn AbsoluteZero
hằng số, bạn không nên chơi với chính mã. Thay vào đó, hãy tạo một bài kiểm tra đơn vị sẽ:
- tự ghi lại mã của bạn,
- tăng độ tin cậy của mã của bạn,
- đảm bảo rằng các nhà bảo trì có thể dựa vào kiểm tra hồi quy khi sửa đổi phương pháp trên,
- phục vụ cho các nhà phát triển khác trong nhóm của bạn, những người có thể cần thực hiện bài kiểm tra tương tự.