Là cam kết / kiểm tra mã hàng ngày là một thực hành tốt?


63

Tôi đã đọc ghi chú của Martin Fowler về Tích hợp liên tục và anh ấy liệt kê là phải "Mọi người cam kết chính tuyến mỗi ngày".

Tôi không muốn cam kết mã trừ khi phần tôi đang làm việc hoàn tất và trong thực tế, tôi cam kết mã của mình cứ sau ba ngày: một ngày để điều tra / tái tạo nhiệm vụ và thực hiện một số thay đổi sơ bộ, ngày thứ hai để hoàn thành các thay đổi và ngày thứ ba để viết bài kiểm tra và dọn dẹp ^ để nộp. Tôi sẽ không cảm thấy thoải mái khi gửi mã sớm hơn.

Bây giờ, tôi lấy các thay đổi từ kho lưu trữ và tích hợp chúng cục bộ thường hai lần một ngày, nhưng tôi không cam kết điều đó thường xuyên trừ khi tôi có thể tạo ra một công việc nhỏ hơn.

Câu hỏi: việc cam kết mỗi ngày là một cách thực hành tốt đến mức tôi nên thay đổi quy trình làm việc của mình để điều chỉnh nó, hay nó không được khuyến khích?

Chỉnh sửa: Tôi đoán tôi nên đã làm rõ rằng tôi có nghĩa là "cam kết" theo nghĩa CVS của nó (hay còn gọi là "đẩy") vì đó có thể là ý nghĩa của Fowler vào năm 2006 khi ông viết điều này.

^ Thứ tự tùy ý hơn và phụ thuộc vào nhiệm vụ, quan điểm của tôi là minh họa khoảng thời gian và hoạt động, chứ không phải trình tự chính xác.


20
Bạn có thể cam kết mã của mình nếu nó biên dịch và thực hiện một số logic hữu ích. Tốt hơn để cam kết mã trong các chu kỳ ngắn nếu bạn đang làm việc trong môi trường nhóm.
EL Yusubov

4
Martin Fowler có giả sử một VCS không được phân phối không?
dùng16764

4
Lưu ý ngày trên bài báo đó: ngày 1 tháng 5 năm 2006. Git và Mercurial thậm chí không bắt đầu cho đến tháng 4 năm 2005 và ấn tượng của tôi là họ thực sự bắt đầu có lực kéo vào khoảng năm 2008. Tôi không thể tìm thấy bất kỳ bài viết nào trên trang web của Fowler cho một trong số họ trước năm 2009. Vì vậy, bài viết này từ năm 2006 rõ ràng giả định một hệ thống kiểm soát nguồn tập trung như SVN. Lời khuyên không áp dụng cho các đội sử dụng DVCS.
Kyralessa

2
@Kyralessa: Bài báo thậm chí còn nói rằng "Subversion là [hệ thống kiểm soát phiên bản] hiện đại".
che

4
Đầu tiên là mã và sau đó là các bài kiểm tra?

Câu trả lời:


43

Tôi không đồng ý với quy tắc này và tôi đồng ý với những gì Mason Wheeler nói. Tôi muốn thêm một vài ý tưởng.

Tôi cố gắng cam kết mỗi khi tôi có một thay đổi có ý nghĩa để cam kết: điều này có thể là vài lần một ngày nếu tôi sửa một vài lỗi nhỏ hoặc mỗi tuần một lần nếu tôi đang làm việc trên một phần mềm lớn hơn mà phần còn lại không thể sử dụng mã theo bất kỳ cách có ý nghĩa cho đến khi nó đạt đến một trạng thái nhất quán.

Ngoài ra, tôi giải thích cam kếtxuất bản một bản sửa đổi có ý nghĩa đóng góp chức năng mới cho cơ sở mã. Tôi nghĩ rằng người ta nên cố gắng làm sạch mã trước khi cam kết để các nhà phát triển khác có thể hiểu ý nghĩa và mục đích của thay đổi khi họ nhìn vào lịch sử sửa đổi. Càng ít thay đổi mà các nhà phát triển khác thấy trong lịch sử thì càng tốt: khi tôi nhìn vào lịch sử sửa đổi, tôi muốn thấy các mức tăng thêm một số chức năng có ý nghĩa; Tôi không quan tâm đến mọi ý tưởng nhỏ mà mỗi nhà phát triển đã có và muốn thử trước khi họ đạt được giải pháp.

Hơn nữa, tôi không nghĩ nên sử dụng máy chủ SVN (hoặc bất kỳ hệ thống kiểm soát phiên bản nào) làm phương tiện dự phòng mà ảnh chụp nhanh mã hiện tại được cam kết (với điều kiện là nó biên dịch): bạn có thể sử dụng thẻ USB hoặc ổ đĩa USB ngoài hoặc ổ đĩa mạng để phản chiếu mã hiện tại của bạn để nó không bị mất nếu máy tính của bạn bị hỏng. Kiểm soát sửa đổi và sao lưu dữ liệu là hai điều khác nhau. Xuất bản bản sửa đổi không giống như lưu ảnh chụp nhanh mã của bạn.

Cuối cùng, tôi nghĩ rằng không nên là một vấn đề để cam kết mọi lúc và sau đó (tức là chỉ khi một người thực sự hài lòng với trạng thái hiện tại của mã) và tránh xung đột hợp nhất không phải là một lý do tốt để cam kết (quá) thường xuyên. Nhiều xung đột hợp nhất xảy ra khi những người khác nhau làm việc trên cùng một tệp cùng một lúc, đó là một thực tiễn xấu (xem ví dụ bài viết này , điểm 7). Hợp nhất các xung đột nên được giảm bớt bằng cách chia một dự án thành các mô-đun với giao diện rõ ràng và càng ít phụ thuộc càng tốt, và bằng cách phối hợp công việc của các nhà phát triển để mã mà họ làm việc chồng chéo ít nhất có thể.

Chỉ 2 xu của tôi.

BIÊN TẬP

Một lý do khác chống lại các cam kết sớm xuất hiện trong đầu tôi là một phiên bản lỗi (rất) không thể được kiểm tra. Nếu bạn đang cam kết trên thân cây và nhóm thử nghiệm của bạn đang thử nghiệm mỗi ngày, họ có thể không có phiên bản thử nghiệm nào trong vài giờ (hoặc trong một ngày). Ngay cả khi bạn không cố gắng sửa lỗi và chỉ hoàn nguyên các thay đổi của mình, việc xây dựng lại có thể mất một vài giờ. Với, giả sử, năm người thử nghiệm làm việc trong nhóm của bạn, bạn đã lãng phí 5 x 2 = 10 giờ thời gian của nhóm do không hoạt động. Nó đã xảy ra với tôi một lần vì vậy tôi thực sự cố gắng tránh các cam kết sớm trong tên của cam kết càng sớm càng tốt .


23
Một 'cam kết' không phải là một 'xuất bản'. 'Cam kết' có nghĩa là 'ảnh chụp nhanh'; 'xuất bản' được gọi là 'đẩy' trong scm-lingo. Tất nhiên, SVN chỉ hợp nhất cả hai khái niệm thành một, làm cho nhiều quy trình công việc hợp lý là không thể, nhưng đó là một hạn chế của công cụ, không phải là quy trình kiểm soát nguồn nói chung.
tdammers

3
Revision control and data backup are two different thingsVâng, tôi chắc chắn cảm thấy theo cách này.
Sled

1
@tdammers: Ý tôi là xuất bản theo cách không chính thức: Miễn là mã trên máy tính của tôi, đó là những thay đổi riêng tư của tôi đối với mã chung. Ngay sau khi tôi cam kết, nó đã được xuất bản, được biết đến với phần còn lại của nhóm và một phần của lịch sử dự án chính thức.
Giorgio

1
Trong trường hợp đó, 'cam kết' có lẽ là từ sai. Nhiều SCM cho phép các cam kết cục bộ và chia sẻ mã của bạn với các thành viên còn lại trong nhóm là một hành động riêng biệt, thường được gọi là 'đẩy'. Một lần nữa, SVN gộp hai khái niệm lại với nhau, nhưng đó là một hạn chế của công cụ và nếu nó cản trở tiến trình công việc của bạn, hãy xem xét chuyển sang SCM khác.
tdammers

@tdammers: Để có sự phân biệt rõ ràng giữa cam kết và xuất bản địa phương sẽ là một bước tiến. Trong SVN tôi có thể sử dụng một nhánh riêng cho điều đó. Nhưng một lần nữa, tôi tự hỏi tại sao tôi muốn theo dõi một bản sửa đổi không có ý nghĩa nhiều với tôi? Tôi không tin rằng tôi muốn có một bản sửa đổi mới (thậm chí là bản riêng) chỉ vì đó là 5 giờ và tôi sẽ về nhà. Tôi thích có một bản sao lưu thay thế.
Giorgio

107

Tôi cam kết mã nhiều lần trong ngày . Bất cứ khi nào tôi đạt đến điểm mà mã hoàn thành đủ để biên dịch và không phá vỡ những thứ khác, nó sẽ đi vào.

Bạn nên xem xét việc chia nhỏ công việc để có thể kiểm tra một cách an toàn một vài lần một ngày.

Các lý do cho điều này là hai:

  1. Bất kỳ công việc nào không được kiểm tra có thể bị mất - máy tính của bạn có thể bị lỗi nghiêm trọng. Trong trường hợp này, bạn càng chờ đợi lâu, bạn càng mất nhiều công việc.
  2. Bạn càng làm nhiều việc mà không cần đăng nhập, càng nhiều mã người khác sẽ cần tích hợp khi cuối cùng bạn quyết định rằng nó sẽ ra. Điều này giới thiệu nhiều cơ hội xung đột và hợp nhất các vấn đề.

2
Nếu bạn gặp vấn đề nghiêm trọng với xung đột và hợp nhất các vấn đề, điều đó có nghĩa là người quản lý dự án của bạn không thực hiện công việc của mình. Nhiều trường hợp liên quan đến chức năng tương tự nên đến cùng một nhà phát triển, để bạn không có hai hoặc nhiều lập trình viên dậm chân vào công việc của nhau.
Mason Wheeler

14
@MasonWheeler - Sau 3 ngày làm việc chưa được cam kết, rất có khả năng một người đã chạm vào mã mà người khác có cùng một lúc. Nếu bạn có một nhóm lập trình viên làm việc này, sự kiện người quản lý dự án tốt nhất không thể tránh xung đột xảy ra.
Oded

3
@Oded: Có thể. Tôi cho rằng phản hồi của tôi được tô màu bởi kinh nghiệm của tôi trên một cơ sở mã đủ lớn để các nhà phát triển của chúng tôi (khoảng một tá lập trình viên trong nhóm) đều có xu hướng có trách nhiệm không chồng chéo. Không chắc nó sẽ khác nhau như thế nào trên các dự án nhỏ hơn.
Mason Wheeler

3
@ArtB - Điều gì xảy ra nếu có ai đó giống như bạn chỉ kiểm tra sau mỗi 3 ngày? Hay mỗi tuần một lần? Bạn đang dựa vào người khác làm điều đúng đắn.
Oded

3
Khi tôi đọc câu hỏi, câu trả lời của tôi là "giống như hỏi liệu có nên tắm mỗi tuần không"?
Andrew Grimm

39

Nghiêm túc tuân thủ bất kỳ phương pháp hoặc thực hành nào mà không hiểu lý do đằng sau nó không bao giờ là một ý tưởng tốt. Đó là nơi lập trình sùng bái hàng hóa đến từ.

Do đó, "Tôi nên cam kết mỗi ngày vì Martin Fowler đã nói như vậy" chỉ là ngu ngốc. Và đôi khi nó cũng không thực tế. Nếu bạn đang làm việc trên một tính năng mới phức tạp, bạn có thể không đạt đến điểm đáng để kiểm tra cho đến khi bạn đã làm việc với nó trong vài ngày.

Điều này không có nghĩa là bạn nên đảm bảo mọi thứ đều hoàn hảo trước khi kiểm tra. Đó là cách tốt để mất việc nếu có sự cố xảy ra. Điều đúng đắn cần làm là phát triển và sử dụng phán đoán tốt về vấn đề này. Quy tắc của ngón tay cái chỉ có thể giúp bạn rất nhiều.


1
Sau đó, nếu nó là tích hợp / phát triển tính năng phức tạp, vẫn không phải là một sự mất mát lớn khi không cam kết nó, có thể không phải là trung kế, nhưng ít nhất là trong một nhánh cho tính năng này, đó là những nhánh dành cho!
Vincent B.

2
Bạn có ý nghĩa gì 'đáng để kiểm tra'? Nếu nó không phá vỡ mã của người khác, tại sao bạn không kiểm tra nó?
Kirk Broadhurst

2
"Ý bạn là gì 'đáng để kiểm tra'? Nếu nó không phá vỡ mã của người khác, tại sao bạn không kiểm tra nó?": Bởi vì tôi không muốn giữ các bản sao cũ của mã chỉ vì chúng tồn tại ở một số điểm trong thời gian. Tôi cũng muốn giữ một bản sao cũ của mã nếu nó chứa một số thông tin hữu ích mà tôi có thể muốn lấy trong tương lai. Nếu không, tôi chỉ tạo ra tiếng ồn vô dụng trong lịch sử sửa đổi.
Giorgio

3
+1. Tôi đã từng làm việc trong một nhóm nơi chúng tôi phải kiểm tra mã vào vcs mỗi ngày, ngay cả khi mã đó là một đột biến hoặc một cuộc điều tra vô dụng. Nó tỏ ra không hiệu quả và lãng phí, đặc biệt vì nó yêu cầu bảo trì định kỳ để dọn sạch vcs. Đó là do sự kết hợp của hoang tưởng về khả năng có nguy cơ mất một chút thời gian để làm lại một cái gì đó, và bởi vì người quản lý đã đọc trong một cuốn sách mà bạn nên cam kết mỗi ngày. Một ví dụ cực đoan có lẽ, nhưng nghiêm túc, nếu bạn không phán xét để biết liệu nó có "đáng" kiểm tra một cái gì đó không, có lẽ bạn không phù hợp với công việc.
S.Robins

14

Oded đã đưa ra hai lý do quan trọng để cam kết mã thường xuyên nhất có thể. Tôi sẽ thêm một vài điều nữa:

  1. Trong khi làm việc với đoạn mã của bạn, người khác có thể cần một số chức năng trên mã đó. Họ không nên đợi 6 ngày để có được nó. Trong trường hợp này, các đồng nghiệp của tôi thường tạo một nguyên mẫu trong đoạn mã của tôi, cam kết nó, tôi thêm phần thân và cam kết lại. Và điều này thường được thực hiện trong một vài giờ.

  2. Mã 'chung' dành cho mọi người để xem mọi thay đổi càng sớm càng tốt. Nếu đoạn mã bạn đang làm việc hoàn toàn tách biệt với công việc của người khác và bạn sẽ không phải chờ họ, thì bạn nên tạo một nhánh để bạn làm việc, và sau đó, nếu mọi thứ thành công, hãy hợp nhất nó với đường dây chính


1
Tại sao câu trả lời này với (IMO) là câu trả lời đúng và chính xác duy nhất (điểm 2) được đánh giá thấp như vậy?! Tất nhiên đó là điểm của một chi nhánh! @Mason Wheeler: Vì vậy, bạn thích mã hóa vài ngày trong một bản thô mà không cam kết một lần nào? Vậy thì tại sao lại sử dụng hệ thống kiểm soát phiên bản?!
Vincent B.

2
Đây là câu trả lời chính xác. Nếu nhiệm vụ của bạn là nhiều ngày làm việc trước khi nó có thể sử dụng được, thì hãy phân nhánh. Mặt khác, bạn cam kết bất cứ khi nào nó hoạt động để đảm bảo rằng các thành viên trong nhóm có phiên bản mới nhất, họ có thể kiểm tra xem nó có hoạt động không và họ xác định các tính năng được thêm / thiếu càng sớm càng tốt.
Kirk Broadhurst

"Vì vậy, bạn thích mã hóa vài ngày một lần mà không cam kết một lần? Vậy thì tại sao lại sử dụng hệ thống kiểm soát phiên bản ?!": Bởi vì cuối cùng bạn muốn thực hiện một sửa đổi, mặc dù bạn không bị buộc phải cam kết mù quáng mỗi ngày. Thay vào đó, tùy thuộc vào bạn quyết định liệu bạn cam kết nhiều lần trong ngày hay bạn làm việc ba ngày liên tục mà không cam kết. Tôi thực sự không thấy được điểm nào trong việc cam kết một số tính năng chưa hoàn thành mà không ai có thể sử dụng: chỉ cần tạo bản sao lưu, ngày hôm sau bạn có thể hoàn thành nó và cam kết.
Giorgio

8

Tôi là một người tin tưởng mạnh mẽ vào việc cam kết mọi thay đổi hợp lý đáng để giữ. Cam kết thường xuyên và nếu mã không đáng để giữ, hãy hoàn nguyên mã về trạng thái sạch. Bạn càng chờ đợi lâu để đẩy / xuất bản mã của mình trở lại, thì càng khó thực hiện và càng gặp nhiều vấn đề hơn. Bạn cũng sẽ nhận được phản hồi về đóng góp của mình nhanh hơn rất nhiều:

  • họ có phá vỡ công trình không?
  • bạn đang nhân đôi nỗ lực của một thành viên khác trong nhóm?
  • bạn đang làm gì đó không đúng?
  • hoặc mọi người đang chờ đợi những thứ từ bạn?

Những thay đổi nhỏ dễ quản lý hơn rất nhiều.

Ngoài ra, đáng chú ý sự khác biệt giữa các hệ thống kiểm soát phiên bản khác nhau. Một số, chẳng hạn như Git (phân phối), sẽ cho phép bạn cam kết và kiểm soát toàn bộ lịch sử của mình cục bộ, chỉ đẩy khi bạn sẵn sàng xuất bản. Những người khác, như SVN (tập trung), sẽ kết hợp hai bước làm cho các cam kết nhỏ rất không hiệu quả.

Đừng quên rằng các cam kết của bạn về cơ bản là thay đổi tài liệu. Khi mọi thứ đi sai, bạn sẽ vui mừng khi có nhiều lịch sử hơn là không đủ. Một cam kết duy nhất cho một tuần làm việc dường như vô dụng đối với tôi. Cuối cùng tôi chỉ đọc từng dòng mã được thay đổi thay vì tóm tắt từng đoạn logic.


5

Tôi nghĩ rằng hầu hết các câu trả lời ở đây đều bỏ lỡ một trong những điểm chính trong tuyên bố của Martin Fowlers. Điều này có liên quan đến Tích hợp liên tục . Mã không được kiểm tra (đẩy / xuất bản / sáp nhập) vào dòng chính không được kiểm tra.

Điều này không nên được đọc như một sự khuyến khích để cam kết bất kỳ mã nào bạn có trong máy cục bộ của mình bất cứ khi nào rời khỏi văn phòng. Như được chỉ ra bởi một số người khác ở đây sẽ là xấu, sẽ phá vỡ công trình và gây ra một tuyến chính không ổn định.

Tuy nhiên, thật đáng khích lệ khi cố gắng thực hiện các thay đổi của bạn trong các bước nhỏ có thể được kiểm tra vào tuyến chính mà không gây ra sự cố. Điều này khuyến khích sự phát triển của mã thay vì tách nó ra và viết lại.

Bây giờ, những gì tốt về cách làm việc này?

  1. Không cam kết các đoạn mã lớn hoặc thay đổi mang tính cách mạng làm giảm cơ hội phá vỡ bản dựng.
  2. Nếu cam kết của bạn phá vỡ bản dựng, việc xác định vấn đề là gì khá đơn giản, để hoàn nguyên nó và sau đó cam kết một phiên bản cố định một cách nhanh chóng.
  3. Bằng cách đảm bảo tất cả các thử nghiệm chạy trên mỗi thay đổi nhỏ trong mã, bạn đảm bảo rằng bạn không đưa ra các lỗi hoặc hồi quy tinh vi có thể xuất phát từ việc có mã phát triển bên ngoài sơ đồ tích hợp liên tục.

Tất nhiên không phải tất cả các thay đổi đều cho vay theo cách tiếp cận này. Như những người khác chỉ ra, không có quy tắc là tuyệt đối. Tuy nhiên, đối với những thay đổi được dự kiến ​​sẽ nằm ngoài tuyến chính trong một thời gian dài, hãy thiết lập một tuyến chính thay thế với sơ đồ tích hợp liên tục của riêng nó và thực hiện theo cách tiếp cận tương tự đối với nó. Với các VCS phân tán ngày nay, đó là một điều khá dễ thực hiện.


+1: "Tất nhiên không phải tất cả các thay đổi đều cho vay theo cách tiếp cận này." Tôi nghĩ rằng đây là điểm. Tôi thấy lời khuyên của Fowler là OK, nhưng người ta nên đánh giá từng trường hợp. Thay vào đó, lời khuyên này thường được khái quát theo một quy tắc tuyệt đối và tuân theo mà không cần xem xét thêm.
Giorgio

@Giorgio, tôi hoàn toàn đồng ý với bạn về điều đó. Không có lời khuyên nào nên được coi là quy tắc tuyệt đối, bất kể ai đứng đằng sau nó.
harald

Một số ý tưởng thêm về điều này. "Mã không được kiểm tra (được đẩy / xuất bản / sáp nhập) vào dòng chính không được kiểm tra.": Tôi đồng ý rằng đây là một nguyên tắc tốt và người ta không nên đợi hàng tuần trước khi đăng ký và kiểm tra mã của họ. Tuy nhiên, ứng dụng mù của nguyên tắc này có thể dẫn đến một ứng dụng bị hỏng thậm chí không thể kiểm tra được (tôi đã thấy điều này trực tiếp: toàn bộ nhóm thử nghiệm không hoạt động trong nhiều ngày và không thể kiểm tra bất cứ điều gì cho đến khi mã được đưa trở lại trạng thái có thể sử dụng được). Có thể những gì người dùng khác viết có thể áp dụng cho một số tình huống nhưng nó không nói chung.
Giorgio

1
Kiểm tra mã không ổn định là không bao giờ ok. Một cam kết phá vỡ CI nên được hoàn nguyên. Nếu bạn thường xuyên thực hiện các thay đổi gia tăng nhỏ, sẽ có ít cơ hội đưa ra sự phá vỡ như vậy hơn là nếu bạn có một thay đổi lớn đã không được kiểm chứng trong một thời gian dài. Nó cũng có thể dễ dàng trở lại nếu nó phá vỡ bản dựng. Nhưng như bạn nói, đôi khi không có cách nào thay đổi đột ngột. Sau đó, bằng mọi cách đánh bóng nó tốt nhất có thể, và kiểm tra kỹ lưỡng trước khi cam kết. Vấn đề là không tuân theo các quy tắc, nhưng hiểu được lời khuyên đến từ đâu.
harald

3

Đối số để kiểm tra mỗi ngày:

  • Mã được lưu trữ và sao lưu chống lại lỗi ổ cứng
  • Hoạt động có thể được ghi lại trong ghi chú cam kết ( tôi đã làm gì vào thứ năm ...? )
  • Tích hợp với cơ sở mã hiện tại xảy ra sớm hơn và trong các phần nhỏ hơn, hy vọng xác định các xung đột hoặc hợp nhất các vấn đề sớm hơn
  • Nhóm của bạn có tầm nhìn về những gì bạn đang làm việc trên
  • Các đồng nghiệp của bạn có thể làm việc với các giao diện của bạn sớm hơn, cho họ nhiều thời gian hơn để tích hợp với 'mã phức tạp lớn' của bạn
  • Mã của bạn sẽ được kiểm tra trong thế giới thực sớm hơn hoặc ít nhất là tiếp xúc với việc sử dụng nhiều hơn số tiền bạn cung cấp, dẫn đến việc xác định sớm hơn các lỗi hoặc thiếu sót.

Đối số chống lại việc kiểm tra mỗi ngày:

  • Không cần hoặc không muốn
  • Chưa 'dọn dẹp' mã của tôi, đó là một mớ hỗn độn
  • Không có thời gian

Tôi không tin có bất kỳ lý do chính đáng nào để kiểm tra ít hơn hàng ngày ngoài sự lười biếng hoặc vô tổ chức. Không có gì tệ hơn là thấy mã đang chạy trong môi trường phát triển không khớp với mã trong nhánh phát triển vì ai đó 'chưa kết thúc' và do đó chưa đăng ký.

Tôi rất muốn sai về điều này vì vậy xin vui lòng cho tôi biết bất kỳ lý lẽ hợp pháp nào chống lại việc đăng ký hàng ngày.


"Tôi không tin rằng có bất kỳ lý do chính đáng nào để kiểm tra ít hơn hàng ngày ngoài sự lười biếng hoặc vô tổ chức.": Tôi tin điều ngược lại vì chính xác cùng một lý do. Tôi có thể dành thời gian để xem trạng thái hiện tại của mã và quyết định xem nó có chứa một số thông tin liên quan đáng ghi nhớ hay không, nếu tôi lười biếng và vô tổ chức, tôi chỉ cần kiểm tra nó (và tạo ra các bản sửa đổi bổ sung với ít thông tin nội dung) miễn là nó biên dịch.
Giorgio

1
Tôi hiểu quan điểm của bạn rằng một người không nên lười biếng và dọn sạch mã của họ mỗi ngày để có thể kiểm tra mã. Mặt khác, khi làm việc với một số mã phức tạp, điều này rất khó đạt được vì việc dọn dẹp có thể mất vài giờ và bạn không thể dành vài giờ mỗi ngày chỉ để dọn sạch mã của mình.
Giorgio

@Giorgio Vậy bạn dành vài ngày để dọn mã? Tôi đã đưa ra một số lý do tốt để kiểm tra hàng ngày - lý do của bạn là bạn sẽ phải dọn sạch mã của mình? Chỉ cần viết mã sạch hơn lên thẳng.
Kirk Broadhurst

Điều này không phải lúc nào cũng có thể, ví dụ nếu tôi đang phát triển từ đầu một số mã phức tạp (> 4000 LỘC) cần rất nhiều thử nghiệm để có được quyền. Có thể là vào cuối ngày, mã này hơi lộn xộn và tôi không muốn sửa nó cho đến khi tôi đạt đến trạng thái nhất quán, một vài ngày sau đó. Thật không may, tôi không thông minh đến mức hoàn thành, hình thức mã hoàn hảo trong tâm trí của tôi và tôi luôn có thể viết tất cả trong vài giờ (tức là vào cuối một ngày). Gần đây tôi đã có một trải nghiệm như vậy và chu kỳ phát triển điển hình (từ trạng thái nhất quán này sang trạng thái tiếp theo) là 2, 3 ngày.
Giorgio

@Giorgio bạn không có chi nhánh phát triển mà bạn đang kiểm tra? Mã phải được kiểm tra để người khác cũng có thể xem xét và kiểm tra nó.
Kirk Broadhurst

2

Nếu bạn có nghĩa là "cam kết" là "hợp nhất vào dòng chính", thì bạn chắc chắn không nên làm điều đó hàng ngày trên một dự án phần mềm được phát hành cho khách hàng. Bạn nên hợp nhất các thay đổi đã được thực hiện và thử nghiệm để tuyến chính luôn hoạt động và có thể giải phóng được, và không ở trạng thái bị hỏng với các tính năng đã hoàn thành một nửa.

Tuy nhiên, điều thú vị khi làm việc với kiểm soát phiên bản phân tán ngày nay là bạn có thể giữ ổn định tuyến chính, đồng thời làm git/hg/whatever commitmọi lúc bạn cảm thấy muốn duy trì trạng thái của mọi thứ. Tôi làm điều này một lần một vài giờ và chắc chắn vào cuối mỗi ngày.

Với DVCS, bạn có thể xuất bản tác phẩm của mình, cộng tác với những người khác trong nhóm của bạn và cập nhật nó với những thay đổi trong nhánh chính. Bạn có thể làm tất cả điều này mà không làm ô nhiễm sự ổn định của mã khách hàng của bạn và / hoặc các nhóm khác phụ thuộc vào.

Trong thời đại, Subversion là công nghệ mới nhất và không có cách nào để rẽ nhánh và hợp nhất các nhánh tính năng mà không quá đau đớn, có một tuyến chính trong đó một số tính năng khác nhau được xây dựng đồng thời có thể là cách tiếp cận tốt nhất. Nhưng sự vượt trội này không vượt quá năm 2010.


2

Trong Team Foundation Server, bạn có thể 'Kệ' không giống như đăng ký, nhưng chỉ cần sao lưu mã của bạn để nếu máy của bạn chết, bạn sẽ không bị mất các thay đổi.

Tôi cũng đã thấy các nhà phần mềm có 'dòng nhà phát triển' và 'dòng chính'. Các nhà phát triển có thể tự do đăng ký vào dòng nhà phát triển bất cứ khi nào họ thấy phù hợp và chỉ có trưởng nhóm mới có quyền truy cập vào tuyến chính để họ có trách nhiệm sao chép mã từ dev sang main khi sản phẩm sẵn sà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.