2008-10-10 29 views
11

Trong dự án Subversion của tôi, tôi có một vài thư mục chứa các dự án nguồn mở khác mà mã của tôi cần. Ví dụ ffmpeg, freetype, matrixssl và một số khác.Cách tốt nhất để thay thế toàn bộ cây thư mục trong Subversion?

Cách tốt nhất để cập nhật SVN để giữ phiên bản mới nhất của một trong những dự án này là gì?

Về cơ bản tôi sẽ làm như sau (sử dụng ffmpeg là một ví dụ):

1) Rename current ffmpeg folder to ffmpeg.old 
2) Download new version of ffmpeg from net 
3) Make sure it and my code compile and work fine together 
4) Update subversion to now hold the "new" version of ffmpeg 
5) Delete ffmpeg.old directory tree 

Trả lời

11

Bạn có thể xem svnbook nói về vendor branches. Đây chính xác là những gì bạn cố gắng hoàn thành

Bạn có thể sử dụng svn_load_dirs.pl để thay thế các bước thủ công 1-5 của bạn. svn_load_dirs.pl cũng sẽ theo dõi các tập tin mới, di chuyển hoặc xóa.

1

Tất cả là đúng ngoại trừ việc bạn không cần bước 1 và 5 - nếu bước 3 thất bại hoàn nguyên thay đổi sử dụng svn Revert chức năng.

+0

Thao tác này có xử lý việc xóa các tệp không còn được sử dụng trong phiên bản mới hay tôi sẽ phải phát hiện và xóa chúng theo cách thủ công không? – KPexEA

+0

sử dụng xóa svn để xóa cây cũ trước khi tải xuống phiên bản mới nhất. Sau đó, không cần phải giải quyết bất cứ điều gì và nếu bước 3 không thành công - hãy hoàn nguyên. Không có gì thực sự bị xóa khỏi SVN. – Dandikas

+0

svn_load_dirs.pl sẽ xử lý các tệp đã xóa – DanJ

0

Tôi nghĩ bạn có hai tùy chọn.

Một)

  1. SVN Xóa tất cả các tập tin.
  2. Nhận hiện tại & làm cho nó hoạt động.
  3. SVN Thêm tất cả các tệp.

Pro: Đảm bảo không có tệp phụ nào được lưu nếu chúng không có trong phiên bản mới nhất.

Con: Có thể mất nhiều thời gian.

B)

  1. Tải về và cài đặt phiên bản mới hơn một tuổi.
  2. Làm cho nó hoạt động.
  3. SVN thêm bất kỳ tệp mới nào.

Pro: Bạn có thể xem những gì đã thay đổi trong các tệp của công cụ.

Con: Có thể kết thúc với sự lộn xộn. Tùy thuộc vào việc ghi đè công cụ có thể gây ra lỗi.

+0

Bước 1 được sử dụng cho cả hai trường hợp là gì? Âm thanh với tôi như một thói quen cũ từ những ngày bạn không sử dụng SVN. – Dandikas

+0

sửa lỗi đó. Tôi đã đi ra khỏi câu hỏi quá nhiều – Tilendor

2

Tôi đã có tình trạng tương tự với CMake, nơi tôi giữ việc phát hành win32 binary kiểm tra vào thư mục nhà cung cấp của chúng tôi:

branches/ 
trunk/ 
vendor/ 
    cmake/ 
     cmake-2.6.0/ 
     cmake-2.6.1/ 
     cmake-2.6.2/ 
     ... 

sau đó tôi sử dụng svn: externals để tham khảo các phiên bản CMake Tôi đang sử dụng . Làm cho nó thực sự dễ dàng để kiểm tra nâng cấp lên phiên bản mới, và nó cũng rõ ràng phiên bản của CMake tôi đang sử dụng.

+0

vì vậy về cơ bản các dự án svn chứa tất cả các phiên bản và bạn chỉ cần bí danh để hiện tại? – KPexEA

+0

Có. Không có điểm nào để loại bỏ những cái cũ, vì thư mục của nhà cung cấp không bao giờ được kiểm tra trực tiếp; nó chỉ được sử dụng svn: externals. – JesperE

0

Nếu một số dự án nhà cung cấp cũng sử dụng Subversion, bạn có thể thêm thuộc tính svn: externals vào thư mục mẹ của nhánh/nhánh của bạn.

Hãy xem SVN book để biết thêm chi tiết.

+0

Đúng, nhưng điều này khiến bạn ở lòng thương xót của kho của nhà cung cấp. Xem câu trả lời http://stackoverflow.com/questions/192915/best-way-to-replace-a-whole-directory-tree-in-subversion/192965#192965 mô tả chi nhánh nhà cung cấp, để có phương thức được kiểm soát tốt hơn. –

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