2010-02-25 40 views
47

Tôi đọc sách lật đổ và rõ ràng với tôi rằng lật đổ không lưu trữ các tệp riêng lẻ mà chỉ lưu giữ các vùng đồng bằng để giảm thiểu không gian đĩa. Subversion cũng làm tương tự với các tập tin nhị phân là tốt (điều này từng là một điểm yếu rất lớn của CVS).Subversion lưu trữ các tệp trong kho lưu trữ như thế nào?

Tuy nhiên tôi không hiểu cơ chế chính xác. Khi tôi cam kết một tập tin những gì sẽ xảy ra?

  1. cửa hàng Subversion chỉ diff (và đã có các phiên bản cũ)
  2. Subversion xóa các phiên bản trước, lưu trữ các tập tin mới nguyên vẹn và tạo ra một diff ngược để "tái tạo" phiên bản cũ nếu cần thiết.
  3. Điều gì đó khác mà tôi chưa từng nghĩ đến.

Trường hợp đầu tiên có vẻ hợp lý nhất. Tuy nhiên điều này đặt ra một câu hỏi khác. Nếu tôi có trong kho lưu trữ subversion một tệp có 1000 commit và một nhà phát triển mới kiểm tra một bản sao sạch, thì subversion sẽ phải tìm nạp phiên bản gốc (nhập ban đầu) và áp dụng 1000 khác biệt về điều này trước khi trả về kết quả. Điều này có đúng không? Có một số loại bộ nhớ đệm cho các tập tin mà phiên bản mới nhất được lưu giữ không?

Về cơ bản, tôi có thể tìm thông tin về nội bộ kho svn ở đâu?

Cập nhật: Dường như phần phụ của subversion đóng một vai trò lớn trong việc này. Tại thời điểm hoặc viết FSFS sử dụng tùy chọn 1 trong khi BDB sử dụng tùy chọn 2. Cảm ơn msemack!

+0

chỉnh nhỏ: "Các phiên bản sau của lật đổ cũng làm tương tự với các tập tin nhị phân cũng". Subversion đã luôn luôn làm điều này (ít nhất là xa như phiên bản 0.3.x). –

+1

có thể trùng lặp với [Hiệu suất SVN sau nhiều lần sửa đổi] (http://stackoverflow.com/questions/127692/svn-performance-after-many-revisions) –

+0

Tôi cũng thấy điều này rất khó hiểu. Có một số kết thúc có sẵn, bdb và fsfs. Sau đó, có những tài liệu về "bong bóng lên", bỏ qua-delta mà dường như mâu thuẫn với nhau. Cách hiện tại một mặc định svn repo lưu trữ các tập tin của nó là gì? – Thomas

Trả lời

12

Bởi vì định dạng kho lưu trữ của Subversion là hoàn toàn nội bộ, chúng được tự do thay đổi biểu diễn từ bản sửa đổi này sang lần sửa đổi tiếp theo. Tôi tin rằng bản sửa đổi hiện tại thường lưu trữ các vùng đồng bằng ngược (tùy chọn của bạn 2), nhưng cũng lưu trữ các ảnh chụp nhanh định kỳ để nó không phải giải quyết 1000 khác biệt trước khi trả lại kết quả.

Ghi chú phát hành Subversion 1.6 có một phần trên Filesystem storage improvements có một số ghi chú về điều này và liên kết đến các nguồn khác. Đủ để nói rằng các chi tiết về lưu trữ dữ liệu Subversion rất phức tạp và có thể thay đổi.

Ngoài ra còn có tài liệu thiết kế trong cây nguồn Subversion mô tả việc sử dụng skip deltas in Subversion. Nói chung, thư mục /notes/ chứa một số tài liệu hữu ích liên quan đến nội Subversion.

7

Từ Subversion Design tài liệu (được khá ngày, mặc dù), bạn có thể có được điều này:

Giống như nhiều hệ thống kiểm soát phiên bản khác, các cửa hàng Subversion thay đổi như sự khác biệt. Nó không tạo bản sao hoàn chỉnh của các nút; thay vào đó, nó lưu trữ bản sửa đổi mới nhất dưới dạng văn bản đầy đủ và các bản sửa đổi trước đó như một loạt các khác biệt ngược lại (từ "diff" được sử dụng lỏng lẻo ở đây - đối với tệp, nó có nghĩa là vdeltas, cho thư mục, nghĩa là định dạng thể hiện thay đổi đối với thư mục).

Tôi không nghĩ rằng điều đó đã thay đổi kể từ đó.

Ngoài ra, hãy xem Bubble-Up Method.

+3

Tài liệu thiết kế mà bạn liên kết đề cập đến cơ sở dữ liệu Berkeley DB cũ, mà SVN không còn sử dụng làm mặc định nữa. –

1

Mỗi lần bạn cam kết một sự thay đổi, các cửa hàng kho một phiên bản mới của rằng tổng thể cây kho, và nhãn cây mới với một số phiên bản mới. Tất nhiên, hầu hết các cây cũng giống như bản sửa đổi trước đây, ngoại trừ các phần bạn thay đổi.

Số phiên bản mới là một nhãn tuần tự áp dụng cho toàn bộ cây mới , không chỉ để các tập tin và thư mục bạn chạm ở chỗ sửa đổi. Tuy nhiên, thông thường, một số sửa đổi được sử dụng để tham chiếu đến thay đổi được cam kết trong bản sửa đổi đó; ví dụ, "sự thay đổi trong r588" ("r588" là viết tắt cho "phiên bản 588") thực sự có nghĩa là "sự khác biệt giữa cây kho 587 và 588", hay nói một cách khác, "các thay đổi được thực để cây 587 để sản xuất cây 588 ".

Có một cái nhìn tại địa chỉ: Subversion FAQ

3

thường xuyên FSFS đặc điểm kỹ thuật có thể giúp bạn.

Hoặc nếu bạn sử dụng Berkeley DB, here's đặc điểm kỹ thuật cho điều đó.

FSFS sử dụng dấu thập phân đảo ngược để lưu trữ các thay đổi và skip-deltas để tăng tốc một số hành động, nếu tôi hiểu mọi thứ chính xác.

Các vấn đề liên quan