Lưu ý: Xem "EDIT" để biết câu trả lời cho câu hỏi hiện tại
Trước hết, hãy đọc Subversion Re-giáo dục của Joel Spolsky. Tôi nghĩ rằng hầu hết các câu hỏi của bạn sẽ được trả lời ở đó.
Một đề xuất khác, cuộc nói chuyện của Linus Torvalds trên Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Câu hỏi khác này cũng có thể trả lời hầu hết các câu hỏi của bạn, và nó là một câu hỏi khá thú vị.
BTW, một điều tôi thấy khá buồn cười: ngay cả Brian Fitzpatrick & Ben Collins-Sussman, hai trong số những người tạo ra sự lật đổ ban đầu đã nói trong một cuộc nói chuyện trên google "xin lỗi về điều đó" đề cập đến việc lật đổ không thua kém (và nói chung là DVCS).
Bây giờ, IMO và nói chung, tính năng động của nhóm phát triển tự nhiên hơn với bất kỳ DVCS nào và một lợi ích nổi bật là bạn có thể cam kết ngoại tuyến vì nó bao hàm những điều sau:
- Bạn không phụ thuộc vào máy chủ và kết nối, nghĩa là thời gian nhanh hơn.
- Không trở thành nô lệ cho những nơi mà bạn có thể truy cập internet (hoặc VPN) chỉ để có thể cam kết.
- Mọi người đều có một bản sao lưu của tất cả mọi thứ (tập tin, lịch sử), không chỉ máy chủ. Có nghĩa là bất cứ ai cũng có thể trở thành máy chủ .
- Bạn có thể cam kết bắt buộc nếu bạn cần mà không làm hỏng mã của người khác . Cam kết là địa phương. Bạn không giẫm lên các ngón chân của nhau trong khi cam kết. Bạn không phá vỡ các bản dựng hoặc môi trường của người khác chỉ bằng cách cam kết.
- Những người không có "quyền truy cập cam kết" có thể cam kết (vì cam kết trong DVCS không ngụ ý mã tải lên), hạ thấp rào cản cho các đóng góp, bạn có thể quyết định lấy các thay đổi của họ hoặc không phải là nhà tích hợp.
- Nó có thể củng cố giao tiếp tự nhiên vì DVCS làm cho điều này trở nên thiết yếu ... trong việc lật đổ những gì bạn có thay vào đó là các cuộc đua cam kết, điều này buộc phải giao tiếp, nhưng bằng cách cản trở công việc của bạn.
- Những người đóng góp có thể lập nhóm và xử lý việc hợp nhất của riêng họ, nghĩa là cuối cùng sẽ làm việc ít hơn cho các nhà tích hợp.
- Người đóng góp có thể có chi nhánh riêng mà không ảnh hưởng đến người khác (nhưng có thể chia sẻ chúng nếu cần thiết).
Về điểm của bạn:
- Sáp nhập địa ngục không tồn tại trong DVCSland; không cần phải xử lý. Xem điểm tiếp theo .
- Trong DVCS, mọi người đều đại diện cho một "nhánh", nghĩa là có sự hợp nhất mỗi khi thay đổi được kéo. Chi nhánh được đặt tên là một điều khác.
- Bạn có thể tiếp tục sử dụng tích hợp liên tục nếu bạn muốn. IMHO không cần thiết mặc dù, tại sao thêm sự phức tạp?, Chỉ cần giữ thử nghiệm của bạn như là một phần của văn hóa / chính sách của bạn.
- Mercurial nhanh hơn trong một số thứ, git nhanh hơn trong những thứ khác. Không thực sự lên đến DVCS nói chung, nhưng với việc triển khai cụ thể của họ AFAIK.
- Mọi người sẽ luôn có dự án đầy đủ, không chỉ bạn. Điều phân tán phải làm với việc bạn có thể cam kết / cập nhật cục bộ, chia sẻ / lấy từ bên ngoài máy tính của bạn được gọi là đẩy / kéo.
- Một lần nữa, đọc Subversion Re-giáo dục. Các DVCS dễ dàng và tự nhiên hơn, nhưng chúng khác nhau, đừng cố nghĩ rằng cvs / svn === cơ sở của tất cả các phiên bản.
Tôi đã đóng góp một số tài liệu cho dự án Joomla để giúp rao giảng về việc di chuyển sang DVCS và ở đây tôi đã thực hiện một số sơ đồ để minh họa tập trung so với phân tán.
Tập trung
Phân phối trong thực tiễn chung
Phân phối đầy đủ nhất
Bạn thấy trong sơ đồ vẫn còn một "kho lưu trữ tập trung" và đây là một trong những đối số ưa thích của người hâm mộ phiên bản tập trung: "bạn vẫn đang được tập trung", và không, vì bạn không phải là kho lưu trữ "tập trung" tất cả đều đồng ý (ví dụ như một repo github chính thức), nhưng điều này có thể thay đổi bất cứ lúc nào bạn cần.
Bây giờ, đây là quy trình công việc điển hình cho các dự án nguồn mở (ví dụ: một dự án có sự cộng tác lớn) sử dụng DVCS:
Bitbucket.org là một phần của github tương đương với đồng bóng, biết rằng họ có kho riêng tư không giới hạn với không gian không giới hạn, nếu nhóm của bạn nhỏ hơn năm bạn có thể sử dụng miễn phí.
Cách tốt nhất bạn có thể thuyết phục bản thân khi sử dụng DVCS là dùng thử DVCS, mọi nhà phát triển DVCS có kinh nghiệm đã sử dụng svn / cvs sẽ cho bạn biết điều đó đáng giá và họ không biết làm thế nào họ sống sót sau thời gian không có nó.
EDIT : Để trả lời chỉnh sửa thứ hai của bạn, tôi chỉ có thể nhắc lại rằng với một DVCS bạn có một quy trình làm việc khác, tôi khuyên bạn không nên tìm lý do không thử vì những cách thực hành tốt nhất , cảm giác như khi mọi người tranh luận rằng OOP không cần thiết bởi vì họ có thể có được xung quanh các mẫu thiết kế phức tạp với những gì họ luôn làm với mô hình XYZ; bạn có thể có lợi
Hãy thử nó, bạn sẽ thấy làm việc trong "một chi nhánh tư nhân" thực sự là một lựa chọn tốt hơn. Một lý do tôi có thể nói về lý do tại sao điều cuối cùng là đúng là vì bạn mất đi nỗi sợ phải cam kết , cho phép bạn cam kết bất cứ lúc nào bạn thấy phù hợp và làm việc một cách tự nhiên hơn.
Về "sát nhập địa ngục", bạn nói "trừ khi chúng tôi đang thử nghiệm", tôi nói "ngay cả khi bạn đang thử nghiệm + bảo trì + làm việc trong phiên bản v2.0 được tân trang cùng một lúc ". Như tôi đã nói trước đó, sáp nhập địa ngục không tồn tại, bởi vì:
- Mỗi khi bạn cam kết bạn tạo ra một nhánh không tên và mỗi khi các thay đổi của bạn gặp thay đổi của người khác, sẽ xảy ra sự hợp nhất tự nhiên.
- Vì các DVCS thu thập nhiều siêu dữ liệu hơn cho mỗi lần xác nhận, ít xảy ra xung đột hơn trong quá trình hợp nhất ... vì vậy bạn thậm chí có thể gọi đó là "hợp nhất thông minh".
- Khi bạn va vào xung đột hợp nhất, đây là những gì bạn có thể sử dụng:
Ngoài ra, quy mô dự án không thành vấn đề, khi tôi chuyển từ lật đổ, tôi thực sự đã thấy được lợi ích khi làm việc một mình, mọi thứ đều cảm thấy đúng. Các changesets (không hẳn là một phiên bản, nhưng một tập hợp cụ thể của sự thay đổi cho các tập tin cụ thể mà bạn bao gồm một cam kết, bị cô lập từ trạng thái của codebase) cho phép bạn hình dung chính xác những gì bạn có nghĩa là bằng cách làm những gì bạn đã làm cho một nhóm cụ thể của tác phẩm, không phải toàn bộ cơ sở mã.
Về cách thức thay đổi hoạt động và tăng hiệu suất. Tôi sẽ cố gắng minh họa nó bằng một ví dụ tôi muốn đưa ra: chuyển đổi dự án mootools từ svn được minh họa trong biểu đồ mạng github của họ .
Trước
Sau
Những gì bạn đang thấy là các nhà phát triển có thể tập trung vào công việc của chính họ trong khi cam kết, mà không sợ phá vỡ mã của người khác, họ lo lắng về việc phá mã của người khác sau khi đẩy / kéo (DVCSs: trước tiên cam kết, sau đó đẩy / kéo, sau đó cập nhật ) nhưng vì việc hợp nhất ở đây thông minh hơn, họ thường không bao giờ thực hiện ... ngay cả khi có xung đột hợp nhất (rất hiếm), bạn chỉ mất 5 phút hoặc ít hơn để khắc phục.
Lời khuyên của tôi cho bạn là hãy tìm một người biết cách sử dụng đồng bóng / git và nói với anh ấy / cô ấy để giải thích điều đó với bạn. Bằng cách dành khoảng nửa giờ với một số người bạn trong dòng lệnh trong khi sử dụng đồng bóng với máy tính để bàn và tài khoản bitbucket của chúng tôi chỉ cho họ cách hợp nhất, thậm chí tạo ra xung đột cho họ để xem cách khắc phục thời gian vô lý, tôi đã có thể chỉ ra chúng là sức mạnh thực sự của một DVCS.
Cuối cùng, tôi khuyên bạn nên sử dụng mercurial + bitbucket thay vì git + github nếu bạn làm việc với folks windows. Mercurial cũng đơn giản hơn một chút, nhưng git mạnh mẽ hơn cho việc quản lý kho lưu trữ phức tạp hơn (ví dụ: git rebase ).
Một số bài đọc khuyến nghị bổ sung: