Tôi nên sử dụng SVN hay Git? [đóng cửa]


321

Tôi đang bắt đầu một dự án phân phối mới. Tôi nên sử dụng SVN hay Git, và tại sao?


5
Vâng, git hoạt động trên Mac. Nếu bạn sử dụng macports để cài đặt nó, nó thậm chí sẽ cài đặt giao diện người dùng mac vào giao diện cam kết và duyệt.
Seth Johnson

3
bản sao có thể có của stackoverflow.com/questions/871/

3
@Andre - vì bạn có thể sử dụng MonoDevelop - Tôi chuyển từ Vault sang SVN để tôi có thể phát triển phần mềm .NET trên máy Mac hoặc pc của mình. Không có ứng dụng khách nào cho Vault nhưng đã có SVN :-)
schmoopy


4
Github / bitbucket + sourcetree = trời! - sourcetre Ứng dụng.com
thecod assassin

Câu trả lời:


253

SVN là một repo và rất nhiều khách hàng. Git là một repo với rất nhiều repos khách hàng, mỗi repos có một người dùng. Nó được phân cấp đến một điểm mà mọi người có thể theo dõi các chỉnh sửa của riêng họ mà không cần phải đẩy mọi thứ sang một máy chủ bên ngoài.

SVN được thiết kế để tập trung hơn, trong đó Git dựa trên mỗi người dùng có repo Git của riêng họ và những repos đó đẩy các thay đổi trở lại thành trung tâm. Vì lý do đó, Git cung cấp cho cá nhân kiểm soát phiên bản địa phương tốt hơn.

Trong khi đó, bạn có sự lựa chọn giữa TortoiseGit , GitExtensions (và nếu bạn lưu trữ kho git "trung tâm" của mình trên github, ứng dụng khách của riêng họ - GitHub cho Windows ).

Nếu bạn đang tìm cách thoát khỏi SVN, bạn có thể muốn đánh giá Bazaar một chút. Đây là một trong những thế hệ hệ thống kiểm soát phiên bản tiếp theo có yếu tố phân tán này. Nó không phụ thuộc POSIX như git nên có các bản dựng Windows gốc và nó có một số thương hiệu nguồn mở mạnh mẽ ủng hộ nó.

Nhưng bạn thậm chí có thể không cần các loại tính năng này. Có một cái nhìn về các tính năng, ưu điểm và nhược điểm của các VCS phân tán . Nếu bạn cần nhiều hơn SVN cung cấp, hãy xem xét một. Nếu bạn không, bạn có thể muốn gắn bó với tích hợp máy tính để bàn vượt trội (hiện tại) của SVN.


24
Cũng có thể có một cái nhìn về Hg (Sao Thủy)
Joel

24
Mọi thứ đã trở nên tốt hơn kể từ tháng 10 năm 2008. Bạn có thể cài đặt TortoiseGit, lấy phiên bản di động mới nhất của MSysGit và cho rùa biết nơi tìm nó. Tôi mới chuyển repo svn lớn của mình sang git hôm nay vì hỗ trợ đổi tên kém của svn cuối cùng đã khiến tôi phát điên.
Chúng tôi là tất cả Monica

4
Di chuyển trên 2 năm nay chúng tôi có một số công cụ windows tốt. Hiện tại tôi đang sử dụng netbeans với MSysGit. Tôi cũng đã có may mắn với TortoiseGit. Tôi nghĩ rằng nó đủ tốt để được sử dụng trong sản xuất. Xem xét việc khó khăn như thế nào để quản lý các xung đột đơn giản trong lật đổ git là một cải tiến rất lớn.
Keyo

24
Chúng tôi sử dụng Git trên Windows rất nhiều và đã có từ lâu. Git hoàn toàn tuyệt vời trên Windows.
Charlie Hoa

13
@Oli Sẽ rất tốt để cập nhật câu trả lời của bạn (đặc biệt về Windows git client) dựa trên các nhận xét ở đây và kinh nghiệm của bạn. Câu trả lời hiện tại có vẻ sai lệch khi 2-3 năm đã trôi qua kể từ khi nó được viết.
amit

111

Tôi chưa bao giờ hiểu khái niệm "git không tốt trên Windows"; Tôi phát triển độc quyền trong Windows và tôi chưa bao giờ có bất kỳ vấn đề nào với git.

Tôi chắc chắn sẽ đề nghị git trên lật đổ; nó chỉ đơn giản là linh hoạt hơn rất nhiều và cho phép "phát triển ngoại tuyến" theo cách lật đổ không bao giờ thực sự có thể. Nó có sẵn trên hầu hết mọi nền tảng có thể tưởng tượng và có nhiều tính năng hơn bạn có thể sử dụng.


9
Mặt khác, tôi có một số vấn đề với git trên windows, nó đã làm những điều thực sự kỳ lạ với repo của tôi. Và tôi đã sử dụng phiên bản gần đây nhất trong cygwin (nó giống như một tháng trước).
Roman Plášil

7
@Roman: tốt, cổng Cygwin hầu như không giống với cổng win32 bản địa. Tôi hy vọng cổng Cygwin sẽ được kiểm tra ít hơn nhiều ...
SamB

49
"Nhiều tính năng hơn bạn có thể sử dụng" là một lá cờ đỏ trong cuốn sách của tôi
BT

26
@ BT "cờ đỏ" tôi không đồng ý. Tôi thường thấy mình muốn có một cách để làm một cái gì đó và sau một chút tìm kiếm tôi phát hiện ra có một vài lệnh tôi không biết về điều đó. Tôi cũng sử dụng GIT trên máy tính windows và chưa gặp vấn đề gì lớn.
nghiệm123

@ tests123 nhưng sau đó chúng không phải là tính năng "có thể bạn sẽ sử dụng" vì bạn thực sự đã sử dụng chúng.
mulllhausen

77

Đây là bản sao câu trả lời tôi đã tạo từ một số câu hỏi trùng lặp kể từ đó đã bị xóa về Git so với SVN (tháng 9 năm 2009).

Tốt hơn? Ngoài liên kết thông thường WhyGitIsBetterThanX , chúng khác nhau:

một là một VCS trung tâm dựa trên bản sao giá rẻ cho các chi nhánh và thẻ còn lại (Git) là một VCS phân tán dựa trên biểu đồ sửa đổi. Xem thêm các khái niệm cốt lõi của VCS .


Phần đầu tiên đó đã tạo ra một số ý kiến ​​thông tin sai lệch giả vờ rằng mục đích cơ bản của hai chương trình (SVN và Git) là như nhau, nhưng chúng đã được thực hiện hoàn toàn khác nhau.
Để làm rõ sự khác biệt cơ bản giữa SVN và Git , hãy để tôi nói lại:

  • SVN là triển khai thứ ba của kiểm soát sửa đổi : RCS, sau đó là CVS và cuối cùng là SVN quản lý các thư mục của dữ liệu được phiên bản. SVN cung cấp các tính năng VCS (ghi nhãn và hợp nhất), nhưng thẻ của nó chỉ là một bản sao thư mục (như một nhánh, ngoại trừ bạn không "được cho là" chạm vào bất cứ thứ gì trong thư mục thẻ) và hiện tại việc hợp nhất của nó vẫn phức tạp, dựa trên meta -data thêm vào để nhớ những gì đã được hợp nhất.

  • Git là một quản lý nội dung tệp (một công cụ được tạo để hợp nhất các tệp), được phát triển thành Hệ thống kiểm soát phiên bản thực , dựa trên một cam kết DAG ( Biểu đồ chu kỳ được điều hướng ), trong đó các nhánh là một phần của lịch sử dữ liệu (chứ không phải là dữ liệu ) và trong đó các thẻ là một siêu dữ liệu thực sự.

Để nói rằng chúng không "khác biệt" về cơ bản bởi vì bạn có thể đạt được cùng một điều, giải quyết cùng một vấn đề, là ... hoàn toàn sai trên nhiều cấp độ.

  • nếu bạn có nhiều sự hợp nhất phức tạp, thực hiện chúng với SVN sẽ lâu hơn và dễ bị lỗi hơn. nếu bạn phải tạo nhiều nhánh, bạn sẽ cần quản lý chúng và hợp nhất chúng, một lần nữa dễ dàng hơn với Git so với SVN, đặc biệt là nếu có nhiều tệp có liên quan (tốc độ trở nên quan trọng)
  • nếu bạn đã hợp nhất một phần cho một tác phẩm đang diễn ra, bạn sẽ tận dụng khu vực (chỉ mục) của Git để chỉ cam kết những gì bạn cần, bỏ phần còn lại và chuyển sang một nhánh khác.
  • nếu bạn cần phát triển ngoại tuyến ... tốt với Git, bạn luôn "trực tuyến", với kho lưu trữ cục bộ của riêng bạn, bất kể quy trình công việc bạn muốn theo với các kho lưu trữ khác.

Vẫn còn những bình luận về câu trả lời cũ (đã xóa) nhấn mạnh:

VonC: Bạn đang nhầm lẫn sự khác biệt cơ bản trong việc thực hiện (sự khác biệt là rất cơ bản, cả hai chúng tôi đều đồng ý rõ ràng về điều này) với sự khác biệt về mục đích.
Cả hai đều là các công cụ được sử dụng cho cùng một mục đích: đây là lý do tại sao nhiều nhóm trước đây đã sử dụng SVN đã khá thành công có thể kết xuất nó theo hướng có lợi cho Git.
Nếu họ không giải quyết vấn đề tương tự, sự thay thế này sẽ không tồn tại.

, mà tôi đã trả lời:

"thay thế" ... thuật ngữ thú vị ( được sử dụng trong lập trình máy tính ).
Dĩ nhiên, Git hầu như không phải là một kiểu con của SVN.

Bạn có thể đạt được các tính năng kỹ thuật giống nhau (thẻ, nhánh, hợp nhất) với cả hai, nhưng Git không cản trở bạn và cho phép bạn tập trung vào nội dung của các tệp mà không cần suy nghĩ về chính công cụ.

Bạn chắc chắn không thể (luôn luôn) chỉ thay thế SVN bằng Git "mà không thay đổi bất kỳ thuộc tính mong muốn nào của chương trình đó (tính chính xác, nhiệm vụ được thực hiện, ...)" (tham chiếu đến định nghĩa thay thế đã nói ở trên ):

  • Một là một công cụ sửa đổi mở rộng, cái còn lại là một hệ thống kiểm soát phiên bản thực sự.
  • Một là phù hợp với dự án nguyên khối từ nhỏ đến trung bình với quy trình hợp nhất đơn giản và các phiên bản song song (không quá nhiều). SVN là đủ cho mục đích đó và bạn có thể không cần tất cả các tính năng Git.
  • Cái còn lại cho phép các dự án từ trung bình đến lớn dựa trên nhiều thành phần ( một repo cho mỗi thành phần ), với số lượng lớn tệp để hợp nhất giữa nhiều nhánh trong một quy trình hợp nhất phức tạp, các phiên bản song song trong các nhánh, hợp nhất trang bị thêm, v.v. Bạn có thể làm điều đó với SVN, nhưng bạn tốt hơn nhiều với Git.
    SVN đơn giản là không thể quản lý bất kỳ dự án nào với bất kỳ quy trình hợp nhất nào. Git có thể.

Một lần nữa, bản chất của chúng là khác nhau về cơ bản (sau đó dẫn đến việc thực hiện khác nhau nhưng đó không phải là vấn đề).
Một người xem kiểm soát sửa đổi dưới dạng thư mục và tệp, người còn lại chỉ xem nội dung của tệp (nhiều đến mức các thư mục trống thậm chí sẽ không đăng ký trong Git!).

Mục tiêu chung chung có thể giống nhau, nhưng bạn không thể sử dụng chúng theo cùng một cách, cũng như bạn không thể giải quyết cùng một loại vấn đề (về phạm vi hoặc độ phức tạp).


10
Tôi không đồng ý với bạn rằng git và svn về cơ bản là khác nhau, nhưng tôi không đồng ý với nhiều quan điểm của bạn. svn có thể đã được viết để thay thế cvs, nhưng chúng không có cách nào khác liên quan, trong khi cv bắt đầu như các tập lệnh trên RCS nên có mối quan hệ trực tiếp. Tuy nhiên, người bạn đang trích dẫn là hoàn toàn đúng, cả hai về cơ bản đều quản lý các bản sửa đổi của tệp, việc triển khai và quá trình xảy ra (hoặc cách thức thực hiện) là chi tiết triển khai. Nó giống như sự khác biệt giữa CRC và SHA1, về cơ bản rất khác nhau nhưng chúng làm điều tương tự.
Erik Funkenbusch

37

2 ưu điểm chính của SVN hiếm khi được trích dẫn:

  1. Hỗ trợ tập tin lớn. Ngoài mã, tôi sử dụng SVN để quản lý thư mục nhà của tôi. SVN là VCS duy nhất (được phân phối hoặc không) không bị sặc trên các tệp TrueCrypt của tôi (vui lòng sửa lại cho tôi nếu có một VCS khác xử lý các tệp 500MB + hiệu quả). Điều này là do các so sánh khác nhau được truyền phát (đây là một điểm rất cần thiết). Không thể chấp nhận Rupync vì đây không phải là 2 chiều.

  2. Kho lưu trữ một phần (subir) kiểm tra / checkin. Mercurial và bzr không hỗ trợ điều này và hỗ trợ của git bị hạn chế. Điều này là xấu trong môi trường nhóm, nhưng vô giá nếu tôi muốn kiểm tra một cái gì đó trên một máy tính khác từ thư mục nhà của tôi.

Chỉ là kinh nghiệm của tôi.


6
"vui lòng sửa cho tôi nếu có một VCS khác xử lý các tệp 500MB + hiệu quả" - Tất nhiên là có hiệu lực!
James nhăn nheo

8
Lực lượng = không miễn phí. Ngoài ra, Perforce không có sẵn cho tất cả các nền tảng.
WhyNotHugo

4
Tại sao không đặt repo SVN bên trong các thùng chứa truecrypt? Bạn cũng có thể tạo đường hầm mặc dù ssh và cấu hình máy chủ để lưu trữ repo cụ thể đó bên trong một tệp truecrypt khác. Điều này có thêm lợi thế là bạn có thể thực hiện kiểm tra một phần của repo đó.
WhyNotHugo

1
@Hugo theo như tôi biết, máy khách Perforce có sẵn cho các biến thể Windows, Unix, Linux, Mac, Amiga, BeOS, Cygwin, HPUX, IBM AS / 400, OS / 2, DEC VMS và Novell File Server. Có một số nền tảng có liên quan bị thiếu trong danh sách?
eis

1
Có, OpenBSD (và tôi biết điều này từ kinh nghiệm, không cần google cái này). Tôi đoán nó cũng không hoạt động trên maemo, mặc dù tôi có thể sai (và vâng, tôi sử dụng git trên maemo).
WhyNotHugo

25

Sau khi nghiên cứu thêm và xem xét liên kết này: https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

(Một số trích đoạn dưới đây):

  • Nó cực kỳ nhanh. Không có SCM nào khác mà tôi đã sử dụng có thể theo kịp nó và tôi đã sử dụng rất nhiều, bao gồm Subversion, Perforce, darcs, BitKeeper, ClearCase và CVS.
  • Nó được phân phối đầy đủ. Chủ sở hữu kho lưu trữ không thể ra lệnh cho cách tôi làm việc. Tôi có thể tạo các nhánh và cam kết thay đổi trong khi ngắt kết nối trên máy tính xách tay của mình, sau đó đồng bộ hóa nó với bất kỳ số lượng kho lưu trữ nào khác.
  • Đồng bộ hóa có thể xảy ra trên nhiều phương tiện truyền thông. Một kênh SSH, qua HTTP thông qua WebDAV, bằng FTP hoặc bằng cách gửi email giữ các bản vá để người nhận thư áp dụng. Một kho lưu trữ trung tâm không cần thiết, nhưng có thể được sử dụng.
  • Chi nhánh thậm chí còn rẻ hơn so với Subversion. Tạo một nhánh đơn giản như viết một tệp 41 byte vào đĩa. Xóa một nhánh cũng đơn giản như xóa tệp đó.
  • Không giống như các nhánh Subversion mang theo lịch sử hoàn chỉnh của họ. mà không phải thực hiện một bản sao lạ và đi qua bản sao. Khi sử dụng Subversion tôi luôn thấy khó xử khi nhìn vào lịch sử của một tệp trên nhánh xảy ra trước khi nhánh được tạo. từ #git: spearce: Tôi không hiểu một điều về SVN trong trang. Tôi đã tạo một nhánh i SVN và duyệt lịch sử cho thấy toàn bộ lịch sử một tệp trong nhánh
  • Hợp nhất chi nhánh đơn giản hơn và tự động hơn trong Git. Trong Subversion, bạn cần nhớ bản sửa đổi cuối cùng mà bạn đã hợp nhất là gì để bạn có thể tạo lệnh hợp nhất chính xác. Git làm điều này tự động, và luôn luôn làm đúng. Điều đó có nghĩa là ít có cơ hội phạm sai lầm khi hợp nhất hai nhánh lại với nhau.
  • Sự hợp nhất chi nhánh được ghi lại như một phần của lịch sử thích hợp của kho lưu trữ. Nếu tôi hợp nhất hai nhánh lại với nhau hoặc nếu tôi hợp nhất một nhánh lại vào thân cây, thì hoạt động hợp nhất đó được ghi lại như một phần của lịch sử đăng lại như đã được tôi thực hiện và khi nào. Thật khó để tranh cãi ai đã thực hiện hợp nhất khi nó ở ngay trong nhật ký.
  • Tạo một kho lưu trữ là một hoạt động tầm thường: mkdir foo; cd foo; git init Đó là nó. Điều đó có nghĩa là tôi tạo một kho lưu trữ Git cho mọi thứ hiện nay. Tôi có xu hướng sử dụng một kho lưu trữ cho mỗi lớp. Hầu hết các kho lưu trữ đó đều dưới 1 MB trong đĩa vì chúng chỉ lưu trữ các bài giảng, bài tập về nhà và câu trả lời LaTeX của tôi.
  • Các định dạng tập tin nội bộ của kho lưu trữ là đơn giản đáng kinh ngạc. Điều này có nghĩa là sửa chữa rất dễ thực hiện, nhưng thậm chí còn tốt hơn bởi vì nó rất đơn giản, rất khó để bị hỏng. Tôi không nghĩ ai đã từng có kho Git bị hỏng. Tôi đã thấy Subversion với fsfs tham nhũng chính nó. Và tôi đã thấy Berkley DB đã tự làm hỏng quá nhiều lần để tin tưởng mã của tôi vào phần phụ trợ bdb của Subversion.
  • Định dạng tệp của Git rất tốt trong việc nén dữ liệu, mặc dù đó là định dạng rất đơn giản. Kho lưu trữ CVS của dự án Mozilla có dung lượng khoảng 3 GB; đó là khoảng 12 GB ở định dạng fsfs của Subversion. Trong Git, nó có dung lượng khoảng 300 MB.

Sau khi đọc tất cả những điều này, tôi tin rằng Git là con đường để đi (mặc dù có một chút đường cong học tập tồn tại). Tôi cũng đã sử dụng Git và SVN trên các nền tảng Windows.

Tôi muốn nghe những gì người khác nói sau khi đọc những điều trên?


15
Git cực kỳ nhanh trên một số hoạt động, chủ yếu là do hoạt động chỉ ảnh hưởng đến kho lưu trữ cục bộ của bạn. Một Git checkin, ví dụ, không nên công minh được so sánh với một checkin SVN, bởi vì một checkin SVN cũng là một sự thúc đẩy của sự thay đổi đến một kho lưu trữ trung gian cho các phần còn lại trong nhóm của bạn. Điều đó đòi hỏi phải có một lần truy cập mạng và so sánh Git không có cam kết mạng nào với việc chuyển mạng không có sự so sánh không phù hợp. Nếu bạn cam kết, và sau đó mất ổ cứng, với Git, bạn đã mất thay đổi của mình. Điều đó tốt nếu đó là những gì bạn mong đợi, nhưng nó không được mong đợi trong các SCM không phân phối.
Edwin Buck

1
@EdwinBuck Không tính đến những gì Waqar đã làm, trong các thử nghiệm ngay cả khi thời gian mạng được tính đến, git có xu hướng nhanh hơn: git-scm.com/about/small-and-fast
Sqeaky

Điểm "Tạo kho lưu trữ là một hoạt động tầm thường" của bạn cực kỳ quan trọng, đặc biệt là trên Windows: so với SVN, việc mô phỏng nhanh chóng một loạt các repos phân tán được kết nối với nhau, tất cả được kết hợp thành một repo trung tâm (--bare) với Git hơn đó là thực hiện tương tự với SVN (cài đặt ứng dụng máy chủ Windows SVN, v.v.). Ngoài ra (thật kỳ lạ) Tôi thấy Git phù hợp hơn trên các HĐH: dòng lệnh được thiết kế rất tốt và do đó đủ thời gian (và hầu như giống hệt nhau giữa các HĐH) so với các ứng dụng máy khách / máy chủ gốc SVN khác nhau ...
Shivan Dragon

1
Bài viết wiki bạn đề cập đến đầy lỗi. Do đó, câu trả lời của bạn là sai. Bị hạ bệ. Có một trang thảo luận trên wiki đề cập đến svnvsgit.com cho biết lý do tại sao việc so sánh là sai.
bahrep

Cực kỳ nhanh? Tôi đã chuyển dự án ciforth từ một cvs địa phương sang github. Đây là một dự án đơn giản nhưng có một tệp nguồn chính lớn gồm 10.000 dòng. Nếu tôi cố gắng sử dụng đổ lỗi cho tập tin này, github rơi vào một thời gian ra. Hầu hết nếu một người không hài lòng với việc nói nhanh và khăng khăng sử dụng vòng loại như vậy thì đó không phải là một ý kiến ​​cân bằng, khiến tôi nghi ngờ về tất cả những gì bạn nói. Groetjes Albert
Albert van der Horst

12

Tôi sẽ thiết lập một kho lưu trữ Subversion. Bằng cách thực hiện theo cách này, các nhà phát triển cá nhân có thể chọn sử dụng máy khách Subversion hoặc máy khách Git (có git-svn). Việc sử dụng git-svnkhông mang lại cho bạn tất cả lợi ích của giải pháp Git đầy đủ, nhưng nó mang lại cho các nhà phát triển cá nhân rất nhiều quyền kiểm soát đối với quy trình làm việc của riêng họ.

Tôi tin rằng sẽ mất một thời gian tương đối ngắn trước khi Git hoạt động tốt như trên Windows cũng như trên Unix và Mac OS X (kể từ khi bạn hỏi).

Subversion có các công cụ tuyệt vời cho Windows, chẳng hạn như tích hợp TortoiseSVN cho Explorer và AnkhSVN cho tích hợp Visual Studio.


11

Điều buồn cười là: Tôi lưu trữ các dự án trong Subversion Repos, nhưng truy cập chúng thông qua lệnh Git Clone.

Vui lòng đọc Phát triển với Git trên Dự án Mã Google

Mặc dù Google Code thực sự nói Subversion, bạn có thể dễ dàng sử dụng Git trong quá trình phát triển. Tìm kiếm "git svn" cho thấy thực tiễn này là phổ biến và chúng tôi cũng khuyến khích bạn thử nghiệm nó.

Sử dụng Git trên Kho lưu trữ Svn mang lại cho tôi lợi ích:

  1. Tôi có thể làm việc phân phối trên một số máy, cam kết và kéo từ và đến chúng
  2. Tôi có một kho svn trung tâm backup/public để người khác kiểm tra
  3. Và họ được tự do sử dụng Git cho riêng mình

3
Chỉ cần một lưu ý: Kể từ tháng 7 năm 2011, Google Code hỗ trợ Git nguyên bản.
Jeremy Salwen

9

Không thực sự trả lời câu hỏi của bạn nhưng nếu bạn muốn những lợi ích của Kiểm soát sửa đổi phân tán - có vẻ như bạn làm - và bạn đang sử dụng Windows Tôi nghĩ rằng bạn nên sử dụng Mercurial thay vì Git vì Mercurial hỗ trợ Windows tốt hơn nhiều. Mercurial cũng có cổng Mac.


9

Nếu nhóm của bạn đã quen thuộc với các phần mềm kiểm soát nguồn và phiên bản như cvs hoặc svn, thì, đối với một dự án đơn giản và nhỏ (như bạn khẳng định là như vậy), tôi khuyên bạn nên sử dụng SVN. Tôi thực sự thoải mái với svn, nhưng đối với dự án thương mại điện tử hiện tại tôi đang làm trên django, tôi đã quyết định làm việc trên git (tôi đang sử dụng git trong chế độ svn, nghĩa là với một repo tập trung mà tôi đẩy tới và kéo từ để cộng tác với ít nhất một nhà phát triển khác). Nhà phát triển khác cảm thấy thoải mái với SVN và trong khi trải nghiệm của những người khác có thể khác nhau, cả hai chúng tôi đang có khoảng thời gian thực sự tồi tệ khi ôm lấy git cho dự án nhỏ này. (Chúng tôi đều là những người dùng Linux khó tính, nếu có vấn đề gì cả.)

Mileage của bạn có thể thay đổi, tất nhiên.


8

Chắc chắn svn, vì Windows là người giỏi nhất, một công dân hạng hai trong thế giới git(xem http://en.wikipedia.org/wiki/Git_(software)#Portability để biết thêm chi tiết).

CẬP NHẬT: Xin lỗi vì liên kết bị hỏng, nhưng tôi đã từ bỏ việc cố gắng để SO hoạt động với các URI có chứa dấu ngoặc đơn. [liên kết cố định ngay bây giờ. -ed]


1
FYI: đặt URL trong dấu ngoặc nhọn hoặc thay thế dấu ngoặc đơn bằng% 28 và% 29.
PhiLho

1
Mã hóa URL có hoạt động cho cú pháp [] () không?
Hank Gay

16
Đây là FUD không chính xác. Git là tuyệt vời trên Windows. Và SVN là khá xấu ở khắp mọi nơi.
Charlie Hoa

6
Đối với tất cả những người hạ thấp tôi, vui lòng quay lại và xem các nhận xét của nhà phát triển từ khoảng năm 2008: khá rõ ràng rằng Linus và băng đảng không quan tâm đến việc hỗ trợ Windows. Điều đó tốt: Tôi cũng không thực sự muốn làm điều đó và phần mềm của tôi không phức tạp như VCS mong đợi hành vi POSIXish từ hệ thống tập tin. Tuy nhiên, có vẻ không công bằng khi mô tả tuyên bố của tôi là FUD nếu bạn nhìn vào bối cảnh.
Hank Gay

2
Có thể trong năm 2008 git rất tệ trên Windows, nhưng tôi đã sử dụng msysgit từ năm 2009 và nó hoạt động hoàn hảo. Điều đó bao gồm gitk, máy tính để bàn ngoại tuyến tương đương với GitHub.
Dan Dascalescu

8

Điểm chính là, Git là một VCS phân tán và Subversion là một tập trung. Các VCS phân tán khó hiểu hơn một chút, nhưng có nhiều ưu điểm. Nếu bạn không cần lợi thế này, Subversion có thể là sự lựa chọn tốt hơn.

Một câu hỏi khác là hỗ trợ công cụ. VCS nào được hỗ trợ tốt hơn bởi các công cụ bạn dự định sử dụng?

EDIT: Ba năm trước tôi đã trả lời theo cách này:

Và Git hoạt động trên Windows tại thời điểm này chỉ thông qua Cygwin hoặc MSYS . Subversion hỗ trợ Windows ngay từ đầu. Vì các giải pháp git cho windows có thể phù hợp với bạn, có thể có vấn đề, vì hầu hết các nhà phát triển Git đều làm việc với Linux và không có tính di động ngay từ đầu. Hiện tại tôi muốn Subversion để phát triển trong Windows. Trong một vài năm điều này có thể không liên quan.

Bây giờ thế giới đã thay đổi một chút. Git đã thực hiện tốt trên các cửa sổ bây giờ. Mặc dù tôi đã thử nghiệm không đầy đủ trên các cửa sổ (vì tôi không còn sử dụng hệ thống này nữa), tôi khá tự tin, rằng tất cả các VCS chính (SVN, Git, Mercurial, Bazaar) đều có triển khai Windows đúng cách. Lợi thế này cho SVN không còn nữa. Các điểm khác (Tập trung so với Phân phối và kiểm tra hỗ trợ công cụ) vẫn hợp lệ.


Tôi lạc quan rằng chân trời của sự không liên quan sẽ ngắn hơn nhiều so với một vài năm.
Greg Hewgill

Vâng, có thể nó sẽ chỉ một năm. Git có một cộng đồng phát triển năng động. Nhưng lật đổ có quá. Trong một hoặc hai năm, bạn sẽ phải nhìn lại cả hai để trả lời câu hỏi này.
Mnementh

1
Bây giờ là một hoặc hai năm sau. Trông nó thế nào? :)
Merlyn Morgan-Graham

3
Git thiếu một phần mở rộng của mô hình SCM phân tán cho các giai đoạn khác của đường ống phát triển phần mềm. Chúng tôi không có một mô hình tốt cho các hệ thống xây dựng phát hành phân tán, thử nghiệm tự động phân tán, kiểm soát chất lượng, kiểm soát phát hành, v.v. Chúng tôi chỉ nhận được một số hỗ trợ thử nghiệm để sao lưu phân tán, và đó là sau nhiều thập kỷ nghiên cứu. Do đó, Git cung cấp nhiều hơn cho nhà phát triển và ít hơn cho quy trình phát triển phần mềm. Tất cả các triển khai Git cuối cùng đều ban phước cho một repo trở thành trung tâm, giúp đơn giản hóa các khả năng Git thú vị nhất thành các bản fax của SVN.
Edwin Buck

1
@hibbelig Git không có kho lưu trữ trung tâm, mọi kho lưu trữ đều có hiệu quả (do thiết kế phân tán của nó) bằng nhau. Điều này có nghĩa là bạn hoặc làm lại đường ống sản xuất của mình để có thể xử lý tất cả các kho lưu trữ như nhau, hoặc ban phước một cách giả tạo cho một kho lưu trữ ở trạng thái "nâng cao giả tạo" (còn gọi là kho lưu trữ trung tâm ). Nếu bạn làm trước, không ai biết nhiều về việc xây dựng các đường ống song song, nơi một bản phát hành có thể đến từ bàn của bất kỳ nhà phát triển nào, nếu bạn làm sau, lời hứa xử lý phân tán bị lừa bởi quy ước tập trung.
Edwin Buck

6

Tôi sẽ chọn SVN vì nó được phổ biến rộng rãi hơn và được biết đến nhiều hơn.

Tôi đoán, Git sẽ tốt hơn cho người dùng Linux.


1
Điều này tuy nhiên, đang thay đổi nhanh chóng. SVN thua thị phần, trong khi lợi nhuận GIT: Ví dụ: wikivs.com/wiki/Git_vs_Subversion#Popularity hoặc programmers.stackexchange.com/questions/136079/...
Zelphir Kaltstahl

@Zelphir: Tôi sẽ không gọi 7 năm một cách nhanh chóng, nhưng đúng vậy, GIT giành được thị phần và đặc biệt là cách tốt hơn để hợp nhất các tệp.
Burkhard

4

Git chưa được hỗ trợ nguyên bản trong Windows. Nó được tối ưu hóa cho các hệ thống Posix. Tuy nhiên, việc chạy Cygwin hoặc MinGW cho phép bạn chạy Git thành công.

Ngày nay tôi thích Git hơn SVN, nhưng phải mất một thời gian để vượt qua ngưỡng nếu bạn đến từ CVS, đất SVN.


8
Xác định 'nguyên bản'. msysgit hoạt động tốt
Milan Babuškov

4

Tôi có lẽ sẽ chọn Git vì tôi cảm thấy nó mạnh hơn SVN rất nhiều. Có những dịch vụ Code Hosting giá rẻ có sẵn, rất phù hợp với tôi - bạn không phải thực hiện sao lưu hoặc bất kỳ công việc bảo trì nào - GitHub là ứng cử viên rõ ràng nhất.

Điều đó nói rằng, tôi không biết gì về việc tích hợp Visual Studio và các hệ thống SCM khác nhau. Tôi tưởng tượng sự tích hợp với SVN để tốt hơn đáng kể.


4

Tôi đã sử dụng SVN trong một thời gian dài, nhưng bất cứ khi nào tôi sử dụng Git, tôi cảm thấy rằng Git rất mạnh mẽ, nhẹ, và mặc dù có một chút đường cong học tập liên quan nhưng tốt hơn SVN.

Điều tôi đã lưu ý là mỗi dự án SVN, khi nó phát triển, sẽ trở thành một dự án có quy mô rất lớn trừ khi nó được xuất khẩu. Trong đó, dự án GIT (cùng với dữ liệu Git) có kích thước rất nhẹ.

Ở SVN, tôi đã giao dịch với các nhà phát triển từ người mới đến chuyên gia và người mới và người trung gian dường như đưa ra xung đột Tệp nếu họ sao chép một thư mục từ dự án SVN khác để sử dụng lại. Trong khi đó, tôi nghĩ trong Git, bạn chỉ cần sao chép thư mục và nó hoạt động, bởi vì Git không giới thiệu các thư mục .git trong tất cả các thư mục con của nó (như SVN làm).

Sau khi giao dịch rất nhiều với SVN từ lâu, cuối cùng tôi cũng nghĩ sẽ chuyển các nhà phát triển của tôi và tôi sang Git, vì nó dễ dàng hợp tác và hợp nhất công việc, cũng như một lợi thế lớn là các thay đổi của bản sao cục bộ có thể được cam kết nhiều mong muốn, và cuối cùng được đẩy đến chi nhánh trên máy chủ trong một lần, không giống như SVN (nơi chúng ta phải thực hiện các thay đổi theo thời gian trong kho lưu trữ trên máy chủ).

Bất cứ ai có thể giúp tôi quyết định xem tôi có thực sự nên đi với Git không?


Tôi sẽ không gọi bất kỳ nhà phát triển nào đã sao chép thư mục do SVN kiểm soát sang dự án khác để sử dụng lại và không mong đợi những rắc rối rõ ràng là 'trung gian'. Tôi sẽ gọi họ là người mới. Vâng, bạn đã đúng, đó là do thư mục con .svn cho SVN biết kho lưu trữ của các tệp. Nếu người dùng đã xóa thư mục con .svn này, thì họ có thể nhập thư mục đó vào dự án SVN mới. Tôi vẫn ở với SVN, nhưng nhu cầu của tôi rất ít. GIT là tuyệt vời cho các dự án lớn hơn.
dyasta

3
Các máy khách svn mới nhất không cần một .svnthư mục trong mỗi thư mục con. Điều đó "sửa" lỗi sao chép trước khi nó xảy ra.
Edwin Buck

4

Nó đi xuống này:

Sự phát triển của bạn sẽ là tuyến tính? Nếu vậy, bạn nên gắn bó với Subversion.

Mặt khác, sự phát triển của bạn sẽ không tuyến tính, điều đó có nghĩa là bạn sẽ cần tạo phân nhánh cho các thay đổi khác nhau và sau đó hợp nhất các thay đổi đó trở lại dòng phát triển chính (được gọi là Git là nhánh chính), Git sẽ làm NHIỀU hơn cho bạn.


3

bạn đã thử Bzr chưa?

Nó khá tốt, theo nghĩa bóng (những người tạo ra Ubuntu) đã tạo ra nó bởi vì họ không thích bất cứ thứ gì khác trên thị trường ...


Các cửa sổ hỗ trợ thực sự cần một chút công việc ở đây, mặc dù. Không quá nhiều đến nỗi tôi đã không vui vẻ sử dụng nó cho tất cả các chương trình gần đây của tôi trong Windows (trong đó tôi đã làm một chút công bằng), hoặc bất cứ điều gì, nhưng vẫn ...
SamB

Gần như 100% thời gian với HĐH, mọi người "tạo ra nó [bất kỳ phần mềm nào] vì nó không giống bất kỳ thứ gì khác trên thị trường".
WhyNotHugo

@Hugo Với nguồn mở, nếu họ thích một thứ khác trên thị trường, họ sẽ đóng góp cho nó thay vì làm một cái gì đó mới.
kéo dài

Đây hoàn toàn không phải là một câu trả lời cho câu hỏi
Albert van der Horst

@AlbertvanderHorst Không phải vậy, câu hỏi đã được trả lời trong những ngày tây hoang dã của SO khi không ai biết gì hơn, và đưa ra một giải pháp thay thế. Có thể cho rằng trong sự vội vàng của tôi, có vẻ như tôi cũng đã viết sai tên của Canonical. Thật xấu hổ cho tôi!
Omar Kooheji

3

Tôi có thể mở rộng câu hỏi và hỏi liệu Git có hoạt động tốt trên MacOS không?

Trả lời Nhận xét: Cảm ơn tin tức, tôi đã mong chờ được dùng thử. Tôi sẽ cài đặt nó ở nhà trên máy Mac của tôi.


1
Vâng, nó hoạt động rất đẹp. Tôi đã cài đặt nó thông qua MacPorts và sử dụng nó hàng ngày.
Greg Hewgill

Nó làm. Thật tuyệt vời trên mọi hệ thống dựa trên POSIX (Unix, Linux, Solaris, BSD, v.v.). Nó thực sự chỉ là Windows nơi vấn đề nằm.
Oli

và git-gui và gitk có thể hoạt động giống nhau trong OS-X như trong Linux và Windows. Trái ngược với rùaSVN, mà AFAIK chỉ có cửa sổ?
David Schmitt

@David Schmitt: tốt, tortoisesvn.tigris.org gọi nó là "Windows Shell Extension for Subversion", vì vậy tôi cho rằng như vậy, vâng ;-).
SamB

@Robert: trải nghiệm của bạn với git trên OS X như thế nào?
David Schmitt


2

SVN có vẻ như là một lựa chọn tốt trong Windows, như được chỉ ra bởi những người khác.

Nếu một số nhà phát triển của bạn muốn thử GIT, nó có thể luôn sử dụng GIT-SVN nơi kho lưu trữ SVN được tạo lại trong kho lưu trữ GIT. Sau đó, anh ta có thể làm việc cục bộ với GIT và sau đó sử dụng SVN để xuất bản các thay đổi của nó lên kho lưu trữ chính.


1

Bạn phải đi với một DVCS, nó giống như một bước nhảy vọt trong quản lý nguồn. Cá nhân tôi sử dụng Monotone và thời gian phát triển của nó không tăng. Chúng tôi đang sử dụng nó cho Windows, Linux và Mac và nó đã rất ổn định. Tôi thậm chí có buildbot thực hiện các bản dựng hàng đêm của dự án trên mỗi nền tảng.

DVCS trong khi được phân phối thường có nghĩa là bạn sẽ tạo một máy chủ trung tâm chỉ để mọi người đẩy các thay đổi đến và đi.

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.