Tại sao người dùng Git nói rằng Subversion không có tất cả mã nguồn cục bộ?


23

Tôi chỉ tiếp tục những gì tôi đã đọc trên SO, vì vậy hãy tha thứ cho tôi, nhưng tất cả những gì tôi đọc được nói rằng một lợi thế lớn của Git so với Subversion là Git cung cấp tất cả mã nguồn cho nhà phát triển tại địa phương, không phải làm gì cả máy chủ.

Với việc hạn chế sử dụng SVN và TortoiseSVN, tôi đã có tất cả mã nguồn, hoặc ít nhất là tôi nghĩ tôi đã làm. Ví dụ, tôi có một trang web. Tôi tải nó lên SVN. Tôi vẫn đang chạy trang web của tôi tại địa phương, phải không? Nếu ai đó gửi thay đổi và tôi không được kết nối, sẽ không có vấn đề gì nếu tôi có Git hay không, cho đến khi tôi kết nối lại với máy chủ.

Tôi không hiểu. Tôi không yêu cầu thử lại cái này so với cái kia ngoại trừ điểm này.


2
Không phải là bạn có tất cả mã nguồn cục bộ, mà là bạn có toàn bộ lịch sử kho lưu trữ cục bộ. Điều này làm cho tất cả các tương tác kho lưu trữ ngoài việc đồng bộ hóa máy chủ nhanh hơn nhiều.
ném đá

Câu trả lời:


69

Tiền đề bạn đang đặt câu hỏi thực sự là sai:

rằng một lợi thế lớn của Git so với Subversion là Git cung cấp tất cả mã nguồn cho nhà phát triển cục bộ

Với cả Subversion và Git, bạn có mã nguồn cục bộ. Với Git, bạn có cả mã nguồn và kho lưu trữ trên máy cục bộ.

Nó đi một cái gì đó như thế này.

Lật đổ:

Mã của bạn <-> Kho lưu trữ

Git:

Mã của bạn <-> Kho lưu trữ cục bộ của bạn <-> Kho lưu trữ từ xa (... <-> một repo từ xa khác, v.v.)

Một lợi ích bạn nhận được từ cấu trúc này là bạn vẫn có thể sử dụng kiểm soát nguồn và cam kết các thay đổi cục bộ của mình với kho lưu trữ cục bộ mà không làm phiền công việc của các thành viên khác trong nhóm (bạn chia sẻ kho lưu trữ từ xa).

Với Subversion, bạn phải mạo hiểm phá vỡ bản dựng cho người khác hoặc chịu sự phát triển cục bộ kéo dài mà không có bất kỳ kiểm soát nguồn nào kết thúc bằng một cam kết lớn (hoặc nhiều khả năng là hoàn nguyên).

Mặt khác, với Git, bạn cảm thấy thoải mái khi thực hiện các thay đổi này cho kho lưu trữ cục bộ của mình, xem nhật ký và khác biệt hoặc thay đổi của bạn và chỉ khi bạn cảm thấy nó sẵn sàng để được chia sẻ với nhóm, hãy đẩy các thay đổi từ cục bộ kho lưu trữ từ xa.


10
Đây là một câu trả lời rất hay và thực sự gây ấn tượng với "... có nguy cơ phá vỡ công trình xây dựng cho người khác hoặc chịu sự phát triển địa phương kéo dài mà không có sự kiểm soát nguồn nào ..."
Charles Sprayberry

1
@cspray: Cảm ơn! Tôi chắc chắn cũng có những lợi ích khác, nhưng đó là nỗi đau lớn nhất tôi có với Svn.
Goran Jovic

git FTW (còn 8 ngày nữa ...)
Trevor Boyd Smith

2
@DanNeely: Thật ra là như vậy - OP đã hỏi về một yêu cầu mà anh ấy đã đọc ở đâu đó và câu trả lời là nó không đúng (xem phần đầu tiên trong câu trả lời của tôi). Phần thứ hai chỉ là một lời giải thích về những gì bất cứ ai đưa ra yêu cầu có thể muốn nói và tại sao.
Goran Jovic

1
@Giorgio: Hãy thử và bạn sẽ biết :) Nghiêm túc mà nói, tôi không nghĩ mình đã từng làm điều đó mà không gặp vấn đề gì (ngoài việc thực hiện hợp nhất hoàn toàn thủ công, loại nào đánh bại mục đích của công cụ)
Goran Jovic

17

Git hoặc Mercurial lưu trữ toàn bộ kho lưu trữ của bạn cục bộ với tất cả các phiên bản và các nhánh được đặt tên. Subversion chỉ lưu trữ một - thường là Sửa đổi đầu. Vì vậy, với Git và Mercurial, bạn có thể truy cập vào kho lưu trữ đầy đủ (tức là mã nguồn hiện tại lịch sử của nó) ngay cả khi mạng của bạn bị hỏng với SVN, bạn bị giới hạn ở lần sửa đổi cuối cùng mà bạn đã cập nhật.


1
@Murph Cảm ơn. Đó thực chất là những gì tôi muốn nói. Tôi đã cố gắng làm rõ.
Amenti

Đây không chỉ là câu hỏi liệu bạn có kết nối mạng với máy chủ hay không; IO cục bộ nhanh hơn và độ trễ thấp hơn nhiều so với IO mạng, điều này giúp kiểm tra lịch sử hoặc đổ lỗi cho tệp nhanh hơn nhiều (cảnh báo đổ lỗi của TrotiseSVN "Xin vui lòng chờ - việc này có thể mất vài phút. Nghiêm túc!"). Sự đánh đổi là có tất cả lịch sử cục bộ có thể cần nhiều không gian đĩa hơn trong các kho lưu trữ lớn hơn; điều này có thể có vấn đề trên máy tính xách tay vì bạn không thể thêm một ổ đĩa bổ sung để bổ sung ổ SSD không phá vỡ ngân hàng nhỏ hơn.
Dan Neely

Nhận xét của @ DanNeely có lẽ hợp lý vào năm 2012, nhưng 4 năm sau, gần như không thể tìm thấy một dự án git nào có thể chiếm bất kỳ phần lớn nào của SSD
Igor Stoppa

7

Câu trả lời ngắn gọn là đây: với git bạn có tất cả mã nguồn của mình, với lật đổ bạn có tất cả các phiên bản mã nguồn mới nhất của bạn.

Git giữ một bản sao của toàn bộ lịch sử kho lưu trữ của bạn cục bộ. Với lật đổ toàn bộ lịch sử là trên một máy chủ.


2

Tôi nghĩ những gì bạn có thể nhận được là với SVN, tất cả các hành động của bạn đều yêu cầu giao tiếp với máy chủ, trong khi GIT thì không. Với SVN, nếu bạn muốn phân nhánh, bạn phân nhánh trên máy chủ và kéo xuống nhánh đó. Với GIT, bạn có thể tạo một chi nhánh địa phương mà không bao giờ có "máy chủ" biết về nó.

Bạn đã đúng khi nói rằng bạn có mã nguồn với cả SVN và GIT, nhưng với GIT, không cần phải có một máy chủ tập trung có chứa mã nguồn. Với GIT, bạn có thể là người DUY NHẤT với mã nguồn, nhưng vẫn có thể thực hiện tất cả các chức năng mà bạn sẽ làm với một VCS điển hình.

Tôi đã nghe những tranh luận chống lại GIT và tôi nghĩ rằng điều này có thể giúp ích cho câu hỏi của bạn, nói rằng vì bạn không bắt buộc phải cam kết với một repo trung tâm, bạn sở hữu mã nguồn của mình cho đến khi bạn đã cam kết và đẩy nó đến máy chủ của mình, nếu bạn có một. Với SVN, cách duy nhất để kiểm soát phiên bản là cam kết với máy chủ, nhưng với GIT, bạn có thể giữ mọi thứ trên máy cục bộ của mình và nếu có sự cố, bạn "có thể mất mọi thứ" mặc dù bạn có thể dễ dàng như vậy mất tất cả các thay đổi của bạn với SVN nếu bạn không cam kết và ổ cứng của bạn cũng bị hỏng.


1

nói rằng vì bạn không bắt buộc phải cam kết với một repo trung tâm, bạn sở hữu mã nguồn của mình cho đến khi bạn đã cam kết và đẩy nó đến máy chủ của mình, nếu bạn có. Với SVN, cách duy nhất để kiểm soát phiên bản là cam kết với máy chủ, nhưng với GIT, bạn có thể giữ mọi thứ trên máy cục bộ của mình và nếu có sự cố, bạn "có thể mất mọi thứ" mặc dù bạn có thể dễ dàng như vậy mất tất cả các thay đổi của bạn với SVN nếu bạn không cam kết và ổ cứng của bạn cũng bị hỏng.

Nếu bạn đẩy hàng ngày, thì rủi ro sẽ nhỏ. Nhưng nếu bạn buộc phải cam kết hàng ngày với máy chủ SVN, thì vào cuối ngày, bạn có thể thực hiện mọi thứ trong một thay đổi lớn duy nhất, không tách rời mọi thay đổi thành các bước nhỏ. Với git, bạn được khuyến khích thực hiện nhiều cam kết nhỏ. Khi đẩy, nếu hợp nhất là cần thiết, hơn là cố gắng hợp nhất và đẩy. Nếu bạn không thể hợp nhất tại thời điểm này, bạn có thể đẩy sang một nhánh mới hoặc kho lưu trữ khác trên máy chủ.

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.