2008-10-12 36 views
9

Tôi đã tìm kiếm một chút, nhưng chưa tìm thấy câu trả lời thỏa đáng, vì vậy tôi muốn nghe ý kiến ​​của bạn về điều này.Thu thập các tệp nhị phân cho SVN

Tôi có một vài công cụ mà tôi phải cập nhật và triển khai cho một vài máy chủ ngay bây giờ. Nguồn được quản lý trong một kho lưu trữ SVN.

Để lưu bản thân, hãy sao chép tập tin nhị phân vào máy chủ sản xuất bằng ftp hoặc các phương tiện tương tự (tôi không có phương tiện xây dựng dự án trên máy chủ), tôi đang nghĩ đến việc tạo vùng trong kho lưu trữ cũng. Sau đó tôi có thể lấy lại phiên bản mới nhất của các tập tin thực thi từ máy chủ svn bất cứ khi nào tôi cần chúng.

Vì tôi không nhất thiết muốn cập nhật/cam kết mã nhị phân mỗi khi tôi làm việc trên nguồn, tôi sẽ không tạo thư mục cho các tệp nhị phân dưới dạng thư mục con của dự án của tôi. Cam kết các tập tin nhị phân sau đó (và nên) là một hành động riêng biệt, có ý thức.

--- trunk 
    --- project1 
    --- project2 
--- built 
    --- project1 
    --- project2 

Theo tôi thấy, không có vấn đề gì với thiết lập này. Những gì tôi thực sự muốn là sau đó cung cấp cho cả hai phiên bản nguồn và các tập tin nhị phân một thẻ duy nhất, để có thể lấy tất cả mọi thứ thuộc về cùng một lúc.

--- tags/project1/release2/ 
     includes files from 
--- trunk/project1/ revision 487 and 
--- built/project1/ revision 488 

Tôi có thể làm gì sau khi có thể và làm cách nào để đạt được điều đó? Tôi có nên xem xét một số cách khác để giải quyết vấn đề này không?

+0

bản sao có thể có của [SVN và nhị phân] (http://stackoverflow.com/questions/191533/svn-and-binaries) –

Trả lời

9

Không có gì lạ về thiết lập của bạn (tôi đang làm những việc tương tự với cả công cụ xây dựng và tạo các tạo phẩm khi tôi cần phải bảo toàn các bit chính xác.) Bố cục bạn muốn chắc chắn là có thể - để "bao gồm" phiên bản cụ thể của các nhánh hoặc thẻ khác trong thẻ/project1/release2 của bạn, tất cả những gì bạn cần làm là đặt svn:externals properties trên thẻ/project1/release2 tham chiếu URL của nguồn và bản sửa đổi bạn muốn kéo vào và bạn đã đặt.

0

Bạn không chắc chắn lý do tại sao bạn không muốn đặt các tệp nhị phân dưới cây trunk/project1/binaries? Điều đó nói rằng, không có gì nên dừng bạn khỏi phải nhìn cây như thế này:

  • thân
    • project1
    • project2
  • xây dựng
    • project1
    • project2
  • thẻ
    • project1
    • <tag id>
      • <code as usual>
      • binaries
2

Tôi tin rằng điều này được xử lý bằng cách sử dụng "externals". Có những cạm bẫy, mặc dù, và tôi vẫn chưa tìm thấy một cái gì đó mà tôi cảm thấy thoải mái với. Tôi làm những gì bạn đề nghị, với các thư viện nguồn của tôi, nhưng tôi vẫn làm điều đó theo cách thủ công.

4

Trong khi tôi không thể trả lời trực tiếp câu hỏi của bạn, tôi sẽ nói về một cách tiếp cận thay thế.

Chúng tôi có một máy chủ tệp riêng cho bản phát hành nhị phân, với chiến lược sao lưu tương tự như cho máy chủ SVN và có một thư mục cho mỗi dự án với bất kỳ thứ gì thuộc dự án không có trong SVN, bao gồm bản phát hành danh mục. Toàn bộ lịch sử của các bản phát hành nhị phân được lưu trữ trong thư mục này, vì vậy bạn có thể nhận được mã nhị phân từ mọi nơi (tốt, từ bên trong mạng của chúng tôi) mà không cần SVN, tức là sao chép nó vào một số máy chủ sản xuất, gửi cho khách hàng hoặc tải xuống thử nghiệm trong máy ảo. Không cần phải kiểm tra hoặc xây dựng lại.

Tôi thấy thiết lập này dễ quản lý hơn so với sao chép các tệp nhị phân vào SVN. Nếu bạn cần một nhị phân chính xác với một phiên bản cụ thể, nó chỉ có, miễn là phiên bản đã được đưa ra cho khách hàng (nhưng sau đó, tại sao bạn sẽ cần một nhị phân chưa bao giờ nhìn thấy ánh sáng mặt trời?).

0

Mặc dù về mặt kỹ thuật, cách tiếp cận đó sẽ hoạt động tốt, cá nhân tôi sẽ không sử dụng SVN để lưu trữ các tệp nhị phân như vậy.

Tôi có 2 lý do tại sao đây là trường hợp. Ban đầu tôi nghĩ rằng SVN đã theo sau CVS và không lưu trữ các khác biệt nhị phân, điều đó hóa ra tôi đã sai về. Ở bất kỳ mức giá nào:

0) "Về mặt kỹ thuật", bạn không cần lưu trữ các tệp đã tạo vì chúng có thể được xây dựng lại nếu cần thiết. Rõ ràng điều này là không thực tế trong cuộc sống thực, nhưng IMHO bạn vẫn nên suy nghĩ 'làm thế nào tôi có thể xây dựng một bộ nhớ cache cho các công cụ tạo ra.'
SVN không thực sự phù hợp với mô hình sử dụng đó. Đây không thực sự là một điểm riêng của nó, nhưng những gì tôi đang cố gắng truyền đạt là "đặt một cái gì đó trong SVN ngụ ý bạn quan tâm đến nó và muốn lưu trữ nó" - nếu bạn không, bạn không nên IMHO truyền đạt điều này tin nhắn, ngầm hoặc cách khác

1) Điều này gây phiền toái. Nếu ai đó kiểm tra phần đầu của repo của bạn, họ sẽ nhận được tất cả các tệp nhị phân. Nếu bạn có nhiều hơn một meg hoặc hai, điều này sẽ làm cho mọi người phải chờ đợi cho rằng công cụ (và sử dụng không gian đĩa của họ) không có lý do chính đáng. Điều này có thể được giải quyết bằng cách thiết lập một kho lưu trữ riêng biệt, nhưng một khi bạn làm điều đó IMHO bạn cũng có thể chỉ cần thiết lập một máy chủ web riêng biệt để thay thế.

2) SVN được thiết kế để giữ tất cả các tệp của bạn mãi mãi. It is very painful and time consuming to completely remove things from the repository, làm cho nó có vấn đề để lưu trữ những thứ mà bạn không cần phải lưu trữ.

Tôi khuyên bạn nên sử dụng máy chủ web để lưu trữ các tệp nhị phân của bạn. (SVN là một máy chủ web sau khi tất cả **). Giữ nhiều tệp nhị phân cũ trên máy chủ theo ý muốn của bạn và sao lưu nó, nhưng sau đó bạn có thể xóa các tệp nhị phân cũ vô ích sau khi bạn không cần chúng nữa.

** Có tôi biết nó sử dụng DAV và do đó không thực sự chỉ là một máy chủ web cũ, nhưng từ quan điểm triển khai đến máy sản xuất, quá trình là 'tôi tải xuống một số tệp bằng http từ http://blah', vì vậy nó cũng có thể là một.

+1

@Orion Edwards: Hãy chắc chắn rằng bạn kiểm tra lại dữ kiện của mình trước khi đăng bài lần sau; từ: http://subversion.tigris.org/faq.html#binary-files "Subversion sử dụng một phương pháp phân biệt hoạt động tốt như nhau trên các tệp nhị phân và văn bản" – Miquella

+0

Giống như Miquella đã chỉ ra, SVN xử lý nhị phân khác nhau rất tốt.Không có gần như nhiều không gian đưa lên bởi versionedbinaries như bạn nghĩ, và tùy thuộc vào mối liên kết của bạn (gia tăng) họ có thể khác nhau rất tốt. Ngoài ra, SVN là VERY MUCH NOT "một máy chủ web". Bạn đang bối rối SVN và DAV. –

+0

@Orion Edwards: 1) Thực tế, tôi tin điều đó không đúng. SVN chỉ lưu trữ diffs, bất kể nội dung tập tin (văn bản/nhị phân) 1b) Đó chính xác là lý do cho cấu trúc mà tôi đề xuất, không lưu trữ các tệp nhị phân dưới dạng thư mục con của dự án của tôi, nhưng trong khu vực riêng của chúng. Bằng cách đó, bạn chỉ nhận được chúng khi bạn thực sự muốn chúng. –

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