it-swarm-vi.tech

Các điểm mạnh và điểm yếu tương đối của Git, Mercurial và Bazaar là gì?

Mọi người ở đây thấy gì về điểm mạnh và điểm yếu tương đối của Git, Mercurial và Bazaar?

Khi xem xét từng người trong số họ với nhau và chống lại các hệ thống kiểm soát phiên bản như SVN và Perforce, vấn đề nào cần được xem xét?

Khi lập kế hoạch di chuyển từ SVN sang một trong những hệ thống kiểm soát phiên bản phân tán này, bạn sẽ xem xét các yếu tố nào?

135
Jordan Dea-Mattson

Git rất nhanh, quy mô rất tốt, và rất minh bạch về các khái niệm của nó. Mặt trái của điều này là nó có một đường cong học tập tương đối dốc. Một cổng Win32 có sẵn, nhưng không hoàn toàn là một công dân hạng nhất. Git hiển thị băm dưới dạng số phiên bản cho người dùng; điều này cung cấp sự đảm bảo (trong đó một hàm băm duy nhất luôn đề cập đến cùng một nội dung; kẻ tấn công không thể sửa đổi lịch sử mà không bị phát hiện), nhưng có thể gây cồng kềnh cho người dùng. Git có một khái niệm duy nhất là theo dõi nội dung tệp, ngay cả khi những nội dung đó di chuyển giữa các tệp và xem tệp dưới dạng đối tượng cấp đầu tiên, nhưng không theo dõi thư mục. Một vấn đề khác với git là có nhiều hoạt động (như nổi loạn) giúp dễ dàng sửa đổi lịch sử (theo một nghĩa nào đó - nội dung được đề cập bởi hàm băm sẽ không bao giờ thay đổi, nhưng các tham chiếu đến hàm băm đó có thể bị mất); một số người theo chủ nghĩa thuần túy (bao gồm cả bản thân tôi) không thích điều đó lắm.

Bazaar khá nhanh (rất nhanh đối với những cây có lịch sử nông, nhưng hiện tại có quy mô kém với chiều dài lịch sử) và dễ học đối với những người quen thuộc với giao diện dòng lệnh của SCM truyền thống (CVS, SVN, v.v.). Win32 được coi là mục tiêu hạng nhất bởi nhóm phát triển của nó. Nó có một kiến ​​trúc có thể cắm cho các thành phần khác nhau và thay thế định dạng lưu trữ của nó thường xuyên; điều này cho phép họ giới thiệu các tính năng mới (như hỗ trợ tốt hơn để tích hợp với các hệ thống kiểm soát sửa đổi dựa trên các khái niệm khác nhau) và cải thiện hiệu suất. Nhóm Bazaar xem xét theo dõi thư mục và đổi tên hỗ trợ chức năng hạng nhất. Mặc dù số nhận dạng id sửa đổi duy nhất trên toàn cầu có sẵn cho tất cả các phiên bản, revnos cây cục bộ (số sửa đổi tiêu chuẩn, gần giống với các mã được sử dụng bởi svn hoặc SCM thông thường khác) được sử dụng thay cho băm nội dung để xác định các sửa đổi. Bazaar có hỗ trợ "kiểm tra nhẹ", trong đó lịch sử được lưu giữ trên một máy chủ từ xa thay vì được sao chép xuống hệ thống cục bộ và được tự động chuyển qua mạng khi cần; hiện tại, điều này là duy nhất trong số các DSCM.

Cả hai đều có sẵn một số hình thức tích hợp SVN; tuy nhiên, bzr-svn có khả năng hơn đáng kể so với git-svn, phần lớn là do các sửa đổi định dạng phụ trợ được giới thiệu cho mục đích đó. [Cập nhật, kể từ năm 2014: SubGit của sản phẩm thương mại bên thứ ba cung cấp giao diện hai chiều giữa SVN và Git, có thể so sánh về độ trung thực với bzr-svn và được đánh bóng hơn đáng kể; Tôi mạnh mẽ khuyến nghị sử dụng nó so với git-svn khi hạn chế về ngân sách và cấp phép].

Tôi đã không sử dụng Mercurial rộng rãi và vì vậy không thể nhận xét chi tiết về nó - ngoại trừ lưu ý rằng nó, như Git, có địa chỉ băm nội dung để sửa đổi; cũng như Git, nó không coi các thư mục là các đối tượng hạng nhất (và không thể lưu trữ một thư mục trống). Tuy nhiên, nó nhanh hơn bất kỳ DSCM nào khác ngoại trừ Git và có khả năng tích hợp IDE (đặc biệt là đối với Eclipse) tốt hơn nhiều so với bất kỳ đối thủ cạnh tranh nào. những người của Git) và đa nền tảng vượt trội của nó và IDE hỗ trợ, Mercurial có thể hấp dẫn đối với các đội có số lượng thành viên đáng kể win32-centric hoặc IDE.

Một mối quan tâm khi di chuyển từ SVN là giao diện GUI của SVN và tích hợp IDE trưởng thành hơn so với bất kỳ SCM phân tán nào. Ngoài ra, nếu bạn hiện đang sử dụng nhiều tính năng tự động hóa tập lệnh trước với SVN ( tức là yêu cầu kiểm tra đơn vị để vượt qua trước khi cam kết có thể tiến hành), có thể bạn sẽ muốn sử dụng một công cụ tương tự PQM để tự động hóa các yêu cầu hợp nhất với chia sẻ của bạn chi nhánh.

SVK là một DSCM sử dụng Subversion làm kho lưu trữ hỗ trợ và tích hợp khá tốt với các công cụ tập trung vào SVN. Tuy nhiên, nó có các đặc tính hiệu suất và khả năng mở rộng kém hơn đáng kể so với bất kỳ DSCM chính nào khác (thậm chí cả Darcs), và nên tránh cho các dự án có khả năng phát triển lớn về chiều dài lịch sử hoặc số lượng tệp.

[Về tác giả: Tôi sử dụng Git và Perforce cho công việc và Bazaar cho các dự án cá nhân của tôi và làm thư viện nhúng; các bộ phận khác trong tổ chức của chủ nhân của tôi sử dụng Mercurial rất nhiều. Ở kiếp trước tôi đã xây dựng rất nhiều tự động hóa xung quanh SVN; trước đó tôi có kinh nghiệm với GNU Arch, BitKeeper, CVS và những người khác. Git ban đầu khá khó chịu - cảm giác như GNU Arch inasmuch như là một môi trường nặng về khái niệm, trái ngược với các bộ công cụ được xây dựng để phù hợp với sự lựa chọn quy trình làm việc của người dùng - nhưng tôi đã khá thoải mái với nó].

142
Charles Duffy

Steve Streeting của dự án Ogre 3D vừa (28/9/2009) đã xuất bản một bài viết trên blog về chủ đề này, nơi anh ấy làm rất tốt và thậm chí trao tay so sánh Git, Mercurial và Bazaar .

Cuối cùng, anh ta tìm thấy điểm mạnh và điểm yếu với cả ba và không có người chiến thắng rõ ràng. Về mặt tích cực, anh ấy đưa ra một bảng tuyệt vời để giúp bạn quyết định đi cùng.

alt text

Đó là một bài đọc ngắn và tôi đánh giá cao nó.

19
Michael La Voie

Mọi người ở đây thấy gì về điểm mạnh và điểm yếu tương đối của Git, Mercurial và Bazaar?

Theo tôi Sức mạnh của Git là thiết kế cơ bản sạch sẽ và bộ tính năng rất phong phú. Tôi cũng nghĩ rằng sự hỗ trợ tốt nhất cho các kho lưu trữ nhiều chi nhánh và quản lý các quy trình công việc nặng chi nhánh. Nó rất nhanh và có kích thước kho lưu trữ nhỏ.

Nó có một số tính năng hữu ích nhưng phải mất một số nỗ lực để sử dụng chúng. Chúng bao gồm nhìn thấy ara (chỉ mục) trung gian giữa vùng làm việc và cơ sở dữ liệu kho lưu trữ, cho phép phân giải hợp nhất tốt hơn trong các trường hợp phức tạp hơn, tăng dần và kết hợp với cây bẩn; phát hiện đổi tên và sao chép bằng cách sử dụng heuristic tương tự thay vì theo dõi chúng bằng một số loại id tệp, hoạt động tốt và cho phép đổ lỗi (chú thích) có thể theo dõi chuyển động mã trên các tệp và không chỉ bán buôn đổi tên.

Một trong những nhược điểm của nó là hỗ trợ MS Windows bị tụt lại phía sau và không đầy đủ. Một nhược điểm dễ nhận thấy khác là nó không được ghi chép tốt như Mercurial, và ít thân thiện hơn so với đối thủ, nhưng nó thay đổi.

Theo tôi Sức mạnh của Mercurial nằm ở hiệu năng tốt và kích thước kho lưu trữ nhỏ, trong hỗ trợ MS Windows tốt của nó.

Theo tôi, sự bất đồng chính là thực tế rằng các chi nhánh địa phương (nhiều chi nhánh trong một kho lưu trữ) vẫn là công dân hạng hai, và theo cách kỳ lạ và phức tạp, nó thực hiện các thẻ. Ngoài ra cách nó xử lý đổi tên tập tin là không tối ưu (nhưng lần di chuyển này đã thay đổi). Mercurial không hỗ trợ sáp nhập bạch tuộc (có nhiều hơn hai bố mẹ).

Từ những gì tôi đã nghe và đọc chính Ưu điểm của Bazaar là hỗ trợ dễ dàng cho quy trình làm việc tập trung (cũng là nhược điểm, với các khái niệm tập trung có thể nhìn thấy ở nơi không nên ), theo dõi đổi tên của cả tập tin và thư mục.

Nhược điểm chính của nó là hiệu năng và kích thước kho lưu trữ cho các kho lưu trữ lớn với lịch sử phi tuyến dài (hiệu suất được cải thiện ít nhất là cho các kho không quá lớn), tuy nhiên thực tế là mô hình mặc định là một trang trại trên mỗi kho lưu trữ (mặc dù bạn có thể thiết lập nó để chia sẻ dữ liệu) và các khái niệm tập trung (nhưng đó cũng là từ những gì tôi đã nghe thấy những thay đổi).

Git được viết bằng C, Shell script và Perl, và có thể viết script; Mercurial được viết bằng C (lõi, để thực hiện) và Python và cung cấp API cho các tiện ích mở rộng; Bazaar được viết bằng Python và cung cấp API cho các tiện ích mở rộng.


Khi xem xét từng người trong số họ với nhau và chống lại các hệ thống kiểm soát phiên bản như SVN và Perforce, vấn đề nào cần được xem xét ?

Các hệ thống kiểm soát phiên bản như Subversion (SVN), Perforce hoặc ClearCase là tập trung hệ thống kiểm soát phiên bản. Git, Mercurial, Bazaar (và cả Darcs, Monotone và BitKeeper) là phân phối hệ thống kiểm soát phiên bản. Hệ thống kiểm soát phiên bản phân tán cho phép phạm vi công việc rộng hơn nhiều. Họ cho phép sử dụng "xuất bản khi sẵn sàng". Họ có sự hỗ trợ tốt hơn cho việc phân nhánh và sáp nhập, và cho các quy trình công việc nặng chi nhánh. Bạn không cần phải tin tưởng những người có quyền truy cập cam kết để có thể nhận được đóng góp từ họ một cách dễ dàng.


Khi lập kế hoạch di chuyển từ SVN sang một trong những hệ thống kiểm soát phiên bản phân tán này, bạn sẽ xem xét các yếu tố nào?

Một trong những yếu tố bạn có thể muốn xem xét là sự hỗ trợ cho việc rút tiền với SVN; Git có git-svn, Bazaar có bzr-svn và Mercurial có phần mở rộng chuyển tiếp.

Tuyên bố miễn trừ trách nhiệm: Tôi là người dùng Git và người đóng góp thời gian nhỏ, và xem (và tham gia) danh sách gửi thư git. Tôi chỉ biết Mercurial và Bazaar từ tài liệu của họ, thảo luận khác nhau về IRC và danh sách gửi thư, bài viết và bài viết trên blog so sánh các hệ thống kiểm soát phiên bản khác nhau (một số được liệt kê trên GitComparison trang trên Git Wiki).

15
Jakub Narębski
14
Pat Notz

Mercurial và Bazaar rất giống nhau trên bề mặt. Cả hai đều cung cấp kiểm soát phiên bản phân tán cơ bản, như trong cam kết ngoại tuyến và hợp nhất nhiều nhánh, cả hai đều được viết bằng python và đều chậm hơn git. Có nhiều điểm khác biệt khi bạn đi sâu vào mã, nhưng , đối với các công việc hàng ngày của bạn, chúng thực sự giống nhau, mặc dù Mercurial dường như có một chút động lực hơn.

Git, tốt, không dành cho người không quen. Nó nhanh hơn nhiều so với cả Mercurial và Bazaar và được viết để quản lý nhân Linux. Nó là nhanh nhất trong ba và nó cũng là mạnh nhất trong ba, bởi khá nhiều. Các công cụ thao tác và ghi nhật ký của Git là không thể so sánh được. Tuy nhiên, nó cũng phức tạp nhất và nguy hiểm nhất khi sử dụng. Rất dễ dàng để mất một cam kết hoặc làm hỏng một kho lưu trữ, đặc biệt là nếu bạn không hiểu hoạt động bên trong của git.

7
Herge

Hãy xem so sánh được thực hiện gần đây bởi các nhà phát triển Python: http://wiki.python.org/moin/DvcsComparison . Họ đã chọn Mercurial dựa trên ba điều quan trọng lý do:

Lựa chọn đi với Mercurial được đưa ra vì ba lý do quan trọng:

  • Theo một khảo sát nhỏ, Python nhà phát triển quan tâm đến việc sử dụng Mercurial hơn là ở Bazaar hoặc Git.
  • Mercurial được viết bằng Python, phù hợp với xu hướng python-dev 'ăn thức ăn cho chó của riêng họ'.
  • Mercurial nhanh hơn đáng kể so với bzr (nó chậm hơn git, mặc dù bởi sự khác biệt nhỏ hơn nhiều).
  • Mercurial dễ học hơn đối với người dùng SVN so với Bazaar.

(từ http://www.python.org/dev/peps/pep-0374/ )

6
Martin Geisler

Sun đã đánh giá git , MercurialBazaar với tư cách là ứng cử viên thay thế VCS của Sun Teamware cho cơ sở mã Solaris. Tôi thấy nó rất thú vị.

5
DGentry

Một thứ rất quan trọng bị thiếu trong Bazaar là cp. Bạn không thể có nhiều tệp chia sẻ cùng một lịch sử, như bạn có trong SVN, xem ví dụ tại đâytại đây . Nếu bạn không có kế hoạch sử dụng cp, bzr là một sự thay thế tuyệt vời (và rất dễ sử dụng) cho svn.

2
Davide

Tôi đã sử dụng Bazaar một thời gian mà tôi thích rất nhiều nhưng đó chỉ là những dự án nhỏ hơn và thậm chí sau đó nó còn khá chậm. Rất dễ học, nhưng không siêu nhanh. Nó là rất nền tảng x mặc dù.

Tôi hiện đang sử dụng Git mà tôi rất thích vì phiên bản 1.6 làm cho nó giống với các VCS khác hơn về các lệnh sử dụng.

Tôi nghĩ rằng sự khác biệt chính cho trải nghiệm của tôi khi sử dụng DVCS là:

  1. Git có cộng đồng sôi động nhất và thường thấy các bài viết về Git
  2. GitHub thực sự đá. Launchpad.net vẫn ổn, nhưng không có gì thích thú với Github
  3. Số lượng công cụ quy trình làm việc cho Git là rất nhiều. Nó được tích hợp ở khắp mọi nơi. Có một số cho Bzr nhưng gần như không nhiều hoặc được duy trì tốt.

Tóm lại, Bzr rất tuyệt khi tôi cắt răng trên DVCS nhưng giờ tôi rất hài lòng với Git và Github.

2
sh1mmer

Vấn đề chính của bạn sẽ là đó là Phân phối SCM và do đó đòi hỏi một chút thay đổi trong suy nghĩ của người dùng. Khi mọi người đã quen với ý tưởng, các chi tiết kỹ thuật và mô hình sử dụng sẽ được đưa ra, nhưng đừng đánh giá thấp rào cản ban đầu đó, đặc biệt là trong môi trường công ty. Hãy nhớ rằng, tất cả các vấn đề là vấn đề con người.

1
David Plumpton

Bazaar là IMHO dễ học hơn git. Git có một hỗ trợ tốt đẹp trong github.com.

Tôi nghĩ bạn nên cố gắng sử dụng cả hai và quyết định cái nào phù hợp với bạn nhất.

1
Rafał Rawicki

Đây là một câu hỏi lớn phụ thuộc rất nhiều vào ngữ cảnh sẽ khiến bạn mất nhiều thời gian để nhập vào một trong những hộp văn bản nhỏ này. Ngoài ra, cả ba trong số này có vẻ giống nhau đáng kể khi được sử dụng cho các công cụ thông thường mà hầu hết các lập trình viên thường làm, vì vậy ngay cả việc hiểu được sự khác biệt cũng đòi hỏi một số kiến ​​thức khá bí truyền.

Bạn có thể sẽ nhận được câu trả lời tốt hơn nhiều nếu bạn có thể phá vỡ phân tích của mình về các công cụ này đến điểm mà bạn có câu hỏi cụ thể hơn.

1
jfm3

Mọi người ở đây thấy gì về điểm mạnh và điểm yếu tương đối của Git, Mercurial và Bazaar?

Đây là một câu hỏi rất cởi mở, giáp với flamebait.

Git là nhanh nhất, nhưng cả ba đều đủ nhanh. Bazaar là linh hoạt nhất (nó có hỗ trợ đọc-ghi trong suốt cho kho SVN) và quan tâm rất nhiều đến trải nghiệm người dùng. Mercurial là một nơi nào đó ở giữa.

Cả ba hệ thống đều có rất nhiều fanboy. Cá nhân tôi là một fanboy của Bazaar.

Khi xem xét từng người trong số họ với nhau và chống lại các hệ thống kiểm soát phiên bản như SVN và Perforce, vấn đề nào cần được xem xét?

Các cựu là hệ thống phân phối. Thứ hai là các hệ thống tập trung. Ngoài ra, Perforce là độc quyền trong khi tất cả những người khác đều miễn phí như trong bài phát biể .

Tập trung so với phi tập trung là một lựa chọn tuyệt vời hơn nhiều so với bất kỳ hệ thống nào bạn đã đề cập trong danh mục của nó.

Khi lập kế hoạch di chuyển từ SVN sang một trong những hệ thống kiểm soát phiên bản phân tán này, bạn sẽ xem xét các yếu tố nào?

Đầu tiên, thiếu một sự thay thế tốt cho TortoiseSVN. Mặc dù Bazaar đang tự làm việc biến thể Rùa , nhưng vẫn chưa có, kể từ tháng 9 năm 2008.

Sau đó, đào tạo những người chủ chốt về cách sử dụng một hệ thống phi tập trung sẽ ảnh hưởng đến công việc của họ.

Cuối cùng, tích hợp với phần còn lại của hệ thống, chẳng hạn như bộ theo dõi vấn đề, hệ thống xây dựng hàng đêm, hệ thống kiểm tra tự động, v.v.

1
ddaa

ddaa.myopenid.com đã đề cập đến nó thông qua, nhưng tôi nghĩ rằng nó đáng để đề cập lại: Bazaar có thể đọc và viết vào kho lưu trữ SVN từ xa. Điều đó có nghĩa là bạn có thể sử dụng Bazaar cục bộ như một bằng chứng về khái niệm trong khi phần còn lại của nhóm vẫn đang sử dụng Subversion.

EDIT: Gần như tất cả các công cụ hiện có một số cách tương tác với SVN, nhưng bây giờ tôi có trải nghiệm cá nhân đó git svn hoạt động cực kỳ tốt. Tôi đã sử dụng nó trong nhiều tháng, với những trục trặc tối thiểu.

1
Hank Gay

Có video hay của Linus Torvalds trên git. Anh ấy là người tạo ra Git, vì vậy đây là những gì anh ấy quảng bá nhưng trong video anh ấy giải thích SCM phân tán là gì và tại sao chúng tốt hơn sau đó tập trung vào. Có rất nhiều so sánh git (Mercurial được coi là OK) và cvs/svn/perforce. Cũng có những câu hỏi từ khán giả liên quan đến việc di chuyển sang SCM phân tán.

Tôi tìm thấy tài liệu này khai sáng và tôi được bán cho SCM phân phối. Nhưng bất chấp những nỗ lực của Linus, sự lựa chọn của tôi là Mercurial. Lý do là bitbucket.org, tôi thấy nó tốt hơn (hào phóng hơn) sau đó là github.

Tôi cần nói ở đây một lời cảnh báo: Linus có phong cách khá hung dữ, tôi nghĩ anh ấy muốn vui nhưng tôi không cười. Ngoài ra, video này rất tuyệt nếu bạn chưa quen với các SCM phân tán và suy nghĩ về việc chuyển từ SVN.

http://www.youtube.com/watch?v=4XpnKHJAok8

1
k1udge

Các hệ thống kiểm soát phiên bản phân tán (DVCS) giải quyết các vấn đề khác với các VCS tập trung. So sánh chúng giống như so sánh búa và tua vít.

Tập trung VCS hệ thống được thiết kế với mục đích có một Nguồn thật sự được ban phước, và do đó Tốt. Tất cả các nhà phát triển làm việc (thanh toán) từ nguồn đó, sau đó thêm (cam kết) các thay đổi của họ, sau đó trở thành Tương tự. Sự khác biệt thực sự duy nhất giữa CVS, Subversion, ClearCase, Perforce, VisualSourceSafe và tất cả các CVCS khác nằm ở quy trình làm việc, hiệu suất và tích hợp mà mỗi sản phẩm cung cấp.

Phân phối VCS hệ thống được thiết kế với mục đích là một kho lưu trữ tốt như bất kỳ kho lưu trữ nào khác và việc hợp nhất từ ​​kho này sang kho khác chỉ là một hình thức giao tiếp khác. Bất kỳ giá trị ngữ nghĩa nào mà kho lưu trữ nên được tin cậy đều được áp đặt từ bên ngoài theo quy trình, chứ không phải bởi chính phần mềm.

Sự lựa chọn thực sự giữa việc sử dụng một loại hoặc loại kia là tổ chức - nếu dự án hoặc tổ chức của bạn muốn kiểm soát tập trung, thì DVCS là không bắt đầu. Nếu các nhà phát triển của bạn dự kiến ​​sẽ làm việc trên toàn quốc/thế giới, mà không có kết nối băng thông rộng an toàn đến kho lưu trữ trung tâm, thì DVCS có lẽ là cứu cánh của bạn. Nếu bạn cần cả hai, bạn là fsck'd.

0
Craig Trader