Tôi là nhà phát triển Mercurial và đã làm việc như một nhà tư vấn Mercurial. Vì vậy, tôi thấy các câu hỏi của bạn rất thú vị và hy vọng tôi trả lời chúng:
- Lợi thế hoặc giá trị cam kết tại địa phương là gì? [...]
Bạn đúng rằng IDE có thể theo dõi các thay đổi cục bộ ngoài quá trình hoàn tác/hoàn tác đơn giản trong những ngày này. Tuy nhiên, vẫn còn một khoảng cách về chức năng giữa các ảnh chụp nhanh tệp này và hệ thống kiểm soát phiên bản đầy đủ.
Cam kết địa phương cung cấp cho bạn tùy chọn chuẩn bị "câu chuyện" của bạn cục bộ trước khi bạn gửi nó để xem xét. Tôi thường làm việc trên một số thay đổi liên quan đến 2-5 cam kết. Sau khi tôi thực hiện cam kết 4, tôi có thể quay trở lại và sửa đổi cam kết 2 một chút (có thể tôi đã thấy một lỗi trong cam kết 2 sau khi tôi thực hiện cam kết 4). Bằng cách đó tôi sẽ làm việc không chỉ trên mã mới nhất, mà còn trên một vài lần commit cuối cùng.Đó là tầm thường có thể khi tất cả mọi thứ là địa phương, nhưng nó trở nên khó khăn hơn nếu bạn cần phải đồng bộ với một máy chủ trung tâm.
- nếu tôi làm hỏng ổ cứng thì sao? [...] Vì vậy, nó mát như thế nào so với kiểm tra tại một repo trung tâm?
Không hề lạnh! :-)
Tuy nhiên, ngay cả với repo trung tâm, bạn vẫn phải lo lắng về dữ liệu không được yêu cầu trong bản sao làm việc. Do đó tôi sẽ yêu cầu bạn phải có một giải pháp sao lưu tại chỗ.
Đó là kinh nghiệm của tôi, rằng mọi người thường có các khối dữ liệu không phổ biến lớn hơn nằm xung quanh trong bản sao làm việc của họ với một hệ thống tập trung. Khách hàng đã nói với tôi cách họ cố gắng thuyết phục các nhà phát triển cam kết ít nhất mỗi tuần một lần.
Những thay đổi này thường rời uncommited vì:
Họ không thực sự kết thúc. Có thể có báo cáo in debug trong các mã, có thể có các chức năng đầy đủ, vv
Cam kết sẽ đi vào trunk
và đó là nguy hiểm với một hệ thống tập trung kể từ khi tác động đó tất cả mọi người khác.
Cam kết sẽ yêu cầu bạn trước tiên hợp nhất với kho lưu trữ trung tâm. Việc hợp nhất đó có thể đáng sợ nếu bạn biết rằng đã có các thay đổi xung đột khác được thực hiện đối với mã. Việc hợp nhất có thể chỉ đơn giản là gây phiền nhiễu bởi vì bạn có thể không phải tất cả được thực hiện với những thay đổi và bạn thích làm việc từ một trạng thái đã biết tốt.
Cam kết có thể chậm khi bạn phải nói chuyện với máy chủ trung tâm quá tải. Nếu bạn đang ở một vị trí ngoài khơi, cam kết thậm chí còn chậm hơn.
Bạn đang tuyệt đối đúng nếu bạn nghĩ rằng ở trên là không thực sự là một vấn đề tập trung so với điều khiển phiên bản distribted. Với CVCS, mọi người có thể làm việc trong các nhánh riêng biệt và do đó trivially tránh 2 và 3 ở trên. Với một nhánh riêng biệt, tôi cũng có thể cam kết nhiều như tôi muốn vì tôi có thể tạo ra một nhánh khác, nơi tôi cam kết thay đổi nhiều hơn (giải quyết 1). Tuy nhiên, các cam kết vẫn có thể chậm, do đó, 4 vẫn có thể áp dụng.
Những người sử dụng DVCS sẽ thường xuyên chuyển các cam kết "cục bộ" của họ sang máy chủ từ xa bằng giải pháp dự phòng của người nghèo. Họ không đẩy tới máy chủ chính nơi mà các thành viên còn lại của đội đang làm việc, nhưng với một máy chủ khác (có thể là riêng tư). Bằng cách đó họ có thể làm việc trong sự cô lập và vẫn giữ sao lưu off-site.
- Làm việc ngoại tuyến hoặc trên máy bay. [...]
Vâng, tôi cũng chưa bao giờ thích đối số đó.Tôi có kết nối Internet tốt 99% thời gian và không bay đủ cho điều này là một vấn đề :-)
Tuy nhiên, đối số thực sự không phải là bạn đang ngoại tuyến, nhưng bạn có thể giả vờ để trở thành ngoại tuyến. Chính xác hơn, bạn có thể làm việc trong sự cô lập mà không phải gửi các thay đổi của bạn tới kho lưu trữ trung tâm ngay lập tức.
Công cụ DVCS được thiết kế xoay quanh ý tưởng rằng mọi người có thể đang làm việc ngoại tuyến. Điều này có một số hậu quả quan trọng:
Chi nhánh sáp nhập trở thành một điều tự nhiên. Khi mọi người có thể làm việc song song, dĩa sẽ tự nhiên xuất hiện trong biểu đồ cam kết. Do đó, các công cụ này phải là thực sự tốt tại các chi nhánh hợp nhất. Một công cụ như SVN is not very good at merging!
Git, Mercurial và các công cụ DVCS khác hợp nhất tốt hơn vì chúng đã có nhiều thử nghiệm hơn trong khu vực này, không trực tiếp vì chúng được phân phối.
Linh hoạt hơn. Với DVCS, bạn có quyền tự do đẩy/kéo các thay đổi giữa các kho lưu trữ tùy ý. Tôi sẽ thường xuyên đẩy/kéo giữa các máy tính ở nhà và máy tính của tôi, mà không cần sử dụng bất kỳ máy chủ trung tâm thực sự nào. Khi mọi thứ đã sẵn sàng để xuất bản, tôi đẩy họ đến một nơi như Bitbucket.
Đồng bộ hóa nhiều trang không còn là "tính năng dành cho doanh nghiệp", đây là tính năng tích hợp sẵn. Vì vậy, nếu bạn có một vị trí ngoài khơi, họ có thể thiết lập một kho lưu trữ trung tâm địa phương và sử dụng nó với nhau. Sau đó, bạn có thể đồng bộ hóa giờ trung tâm địa phương, hàng ngày hoặc khi nó phù hợp với bạn. Điều này đòi hỏi không có gì hơn một cronjob chạy hg pull
hoặc git fetch
đều đặn.
Khả năng mở rộng tốt hơn do có nhiều logic hơn ở phía máy khách. Điều này có nghĩa là bảo trì ít hơn trên máy chủ trung tâm và các công cụ mạnh mẽ hơn phía máy khách.
Với DVCS, tôi hy vọng có thể thực hiện tìm kiếm từ khóa thông qua các sửa đổi của mã (không chỉ thư cam kết). Với một công cụ tập trung, bạn thường cần phải thiết lập một công cụ lập chỉ mục bổ sung.
Dường như bạn đang tìm kiếm một cuộc tranh luận thay vì thành thật tìm cách thuyết phục. Git không dành cho tất cả mọi người, cũng không phải cho mọi dự án. Như bạn đã nói có hàng ngàn chủ đề như thế này, và nếu đọc tất cả những gì bạn không bị thuyết phục, thì đừng dùng nó. – David
@David - Đã thích phản hồi của bạn và, đó là lý do tại sao tôi chưa bỏ phiếu cho chuyển đổi sang DVCS trong tổ chức của tôi. Không, tôi không tìm kiếm một lý lẽ. Tất cả những gì tôi đang tìm kiếm là một câu trả lời rõ ràng và ngắn gọn cho 3 câu hỏi đầu tiên của tôi. –
Joel Spolsky tạo ra một trường hợp khá tốt: www.hginit.com –