Git không tốt hơn Subversion. Nhưng cũng không tệ hơn. Nó khác nhau.
Sự khác biệt chính là nó được phân cấp. Hãy tưởng tượng bạn là một nhà phát triển trên đường, bạn phát triển trên máy tính xách tay của mình và bạn muốn có quyền kiểm soát nguồn để bạn có thể quay lại 3 giờ.
Với Subversion, bạn có một vấn đề: Kho lưu trữ SVN có thể ở vị trí bạn không thể truy cập (trong công ty của bạn và bạn không có internet vào lúc này), bạn không thể cam kết. Nếu bạn muốn tạo một bản sao của mã của mình, bạn phải sao chép / dán mã theo nghĩa đen.
Với Git, bạn không gặp phải vấn đề này. Bản sao cục bộ của bạn là một kho lưu trữ và bạn có thể cam kết với nó và nhận được tất cả các lợi ích của kiểm soát nguồn. Khi bạn lấy lại kết nối với kho lưu trữ chính, bạn có thể cam kết chống lại nó.
Điều này thoạt nhìn có vẻ tốt, nhưng chỉ cần ghi nhớ sự phức tạp thêm vào phương pháp này.
Git dường như là điều "mới, sáng bóng, mát mẻ". Điều đó không có nghĩa là xấu (có một lý do Linus đã viết nó cho sự phát triển Hạt nhân Linux), nhưng tôi cảm thấy rằng nhiều người nhảy lên tàu "Kiểm soát nguồn phân tán" chỉ vì nó mới và được viết bởi Linus Torvalds, mà không thực sự được viết biết tại sao / nếu nó tốt hơn.
Subversion có vấn đề, nhưng Git, Mercurial, CVS, TFS hay bất cứ điều gì cũng vậy.
Chỉnh sửa: Vì vậy, câu trả lời này đã được một năm tuổi và vẫn tạo ra nhiều upvote, vì vậy tôi nghĩ rằng tôi sẽ thêm một số giải thích. Trong năm ngoái kể từ khi viết bài này, Git đã đạt được rất nhiều động lực và hỗ trợ, đặc biệt là khi các trang web như GitHub thực sự cất cánh. Hiện tại tôi đang sử dụng cả Git và Subversion và tôi muốn chia sẻ một số hiểu biết cá nhân.
Trước hết, Git có thể thực sự khó hiểu lúc đầu khi làm việc phi tập trung. Điều khiển từ xa là gì? và Làm thế nào để thiết lập đúng kho lưu trữ ban đầu? là hai câu hỏi xuất hiện ngay từ đầu, đặc biệt là so với "svnadmin tạo" đơn giản của SVN, "git init" của Git có thể lấy các tham số --bare và - shared có vẻ là cách "phù hợp" để thiết lập một tập trung kho. Có những lý do cho điều này, nhưng nó thêm phức tạp. Tài liệu của lệnh "thanh toán" rất khó hiểu đối với những người thay đổi - cách "thích hợp" dường như là "git clone", trong khi "git checkout" dường như chuyển nhánh.
Git THỰC SỰ tỏa sáng khi bạn được phân cấp. Tôi có một máy chủ ở nhà và một máy tính xách tay trên đường và SVN đơn giản là không hoạt động tốt ở đây. Với SVN, tôi không thể kiểm soát nguồn cục bộ nếu tôi không được kết nối với kho lưu trữ (Có, tôi biết về SVK hoặc về các cách để sao chép repo). Với Git, dù sao đó cũng là chế độ mặc định. Đó là một lệnh bổ sung mặc dù (git commit cam kết cục bộ, trong khi git đẩy gốc master đẩy nhánh chủ đến từ xa có tên "origin").
Như đã nói ở trên: Git thêm phức tạp. Hai chế độ tạo kho lưu trữ, thanh toán so với sao chép, cam kết so với đẩy ... Bạn phải biết lệnh nào hoạt động cục bộ và hoạt động với "máy chủ" (Tôi cho rằng hầu hết mọi người vẫn thích một "kho lưu trữ chính" trung tâm ).
Ngoài ra, công cụ vẫn chưa đủ, ít nhất là trên Windows. Vâng, có một Visual Studio AddIn, nhưng tôi vẫn sử dụng git bash với msysgit.
SVN có lợi thế là đơn giản hơn rất nhiều để tìm hiểu: Có kho lưu trữ của bạn, tất cả các thay đổi đối với nó, nếu bạn biết cách tạo, cam kết và kiểm tra và bạn đã sẵn sàng và có thể chọn các thứ như phân nhánh, cập nhật, v.v. trên.
Git có lợi thế là nó phù hợp hơn nếu một số nhà phát triển không phải lúc nào cũng được kết nối với kho lưu trữ chính. Ngoài ra, nó nhanh hơn SVN rất nhiều. Và từ những gì tôi nghe được, sự hỗ trợ phân nhánh và hợp nhất sẽ tốt hơn rất nhiều (đó là điều được mong đợi, vì đây là những lý do cốt lõi được viết ra).
Điều này cũng giải thích lý do tại sao nó thu được nhiều tiếng vang trên Internet, vì Git hoàn toàn phù hợp với các dự án Nguồn mở: Chỉ cần Fork nó, cam kết các thay đổi của bạn với Fork của riêng bạn, sau đó yêu cầu người bảo trì dự án ban đầu rút các thay đổi của bạn. Với Git, điều này chỉ hoạt động. Thực sự, hãy thử nó trên Github, đó là phép thuật.
Những gì tôi cũng thấy là Cầu Git-SVN: Kho lưu trữ trung tâm là một repo Subversion, nhưng các nhà phát triển làm việc tại địa phương với Git và cây cầu sau đó đẩy các thay đổi của họ sang SVN.
Nhưng ngay cả với sự bổ sung dài dòng này, tôi vẫn đứng trước thông điệp cốt lõi của mình: Git không tốt hơn hay tệ hơn, nó chỉ khác. Nếu bạn có nhu cầu "Kiểm soát nguồn ngoại tuyến" và sẵn sàng dành thêm thời gian để học nó, thật tuyệt vời. Nhưng nếu bạn có Kiểm soát nguồn tập trung nghiêm ngặt và / hoặc đang vật lộn để giới thiệu Kiểm soát nguồn ngay từ đầu vì đồng nghiệp của bạn không quan tâm, thì sự đơn giản và công cụ tuyệt vời (ít nhất là trên Windows) của SVN sẽ tỏa sáng.