2010-03-29 32 views
6

Tôi có một chi nhánh trong một repo svn cấu trúc kém mà cần phải được tước ra và chuyển đến một kho svn khác. (Tôi đang cố gắng để làm sạch nó lên một số).Làm thế nào để di chuyển một codebase từ một repo svn sang một lịch sử bảo quản khác?

Nếu tôi làm svn log và không dừng trên bản sao/đổi tên Tôi có thể xem tất cả 3427 cam kết mà tôi quan tâm. Có cách nào để loại bỏ các bản sửa đổi ra, viết tắt của một số kịch bản lớn?

Tôi sẽ làm theo lời khuyên trong this question nhưng nhánh này đã được di chuyển khắp nơi và tôi cũng muốn giữ nguyên di chuyển.

+3

Tôi đã hỏi các câu hỏi tương tự và 'svndumpfilter' luôn là câu trả lời tiêu chuẩn. Bạn có chắc chắn nó sẽ không cắt nó cho bạn? –

+0

Vâng tôi có thể sử dụng svndumpfilter, nhưng tôi nghĩ rằng tôi sẽ phải làm ít nhất 9 đường dẫn đổi tên tại các điểm trong bãi chứa. Tôi chỉ không biết nếu có một giải pháp tự động. (Các repo là quá sai lầm để sử dụng git-svn). – chotchki

+0

Tại sao không nhập các sửa đổi như hiện tại và đổi tên chúng thành phiên bản lật đổ? Không cần phải viết lại lịch sử? –

Trả lời

2

Tôi đoán đây có thể là tương tự như những gì @ZacThompson (và @Pekka) có nghĩa là: Tôi nghĩ svndumpfilter là bạn của bạn.

Từ câu hỏi của bạn Tôi nghĩ bạn có ý tưởng về việc nó có ý nghĩa gì nhưng phải đấu tranh với việc sao chép/di chuyển chi nhánh trên khắp nơi? Một câu trả lời để có thể được tìm thấy trong các trước khi đề cập SVN Documentation, tôi tin rằng:

Ngoài ra, đường dẫn sao chép có thể cung cấp cho bạn một số rắc rối . Subversion hỗ trợ các thao tác sao chép trong kho lưu trữ, trong đó đường dẫn mới được tạo bằng cách sao chép một số đường dẫn hiện có . Có thể rằng tại một số thời điểm trong vòng đời kho lưu trữ của bạn, bạn có thể đã sao chép một tệp hoặc thư mục từ một số vị trí mà svndumpfilter không bao gồm, đến vị trí bao gồm. Để làm bãi tự túc, svndumpfilter cần vẫn thấy việc bổ sung dữ liệu mới path-bao gồm cả nội dung của bất kỳ tập tin được tạo ra bởi sao chép và không đại diện cho rằng việc bổ sung như một bản sao từ một nguồn mà sẽ không tồn tại trong dữ liệu kết xuất được lọc của bạn luồng. Nhưng vì Subversion định dạng kết xuất kho lưu trữ chỉ hiển thị những gì đã được thay đổi trong mỗi sửa đổi, nội dung của nguồn sao chép có thể không sẵn có . Nếu bạn nghi ngờ rằng bạn có bất kỳ bản sao nào thuộc loại này trong kho lưu trữ của mình, bạn có thể muốn suy nghĩ lại về tập hợp của bạn bao gồm/loại trừ đường dẫn, có thể bao gồm cả các đường dẫn .

Ý nghĩa: thực hiện svndumpfilter bao gồm tất cả các chi nhánh chi nhánh từng sống tại. Hay tôi đang thiếu một cái gì đó?

Một khả năng khác có thể là svndumpfilter2 được đề cập bởi @compie trong chuỗi bạn đã liên kết mặc dù tôi tin rằng nó thậm chí không cần thiết (và tôi không biết @compie hoặc svndumpfilter2).

+0

Tôi không biết về svndumpfilter2 nhưng có vẻ như đó là những gì tôi đang tìm kiếm. Tôi sẽ thử nó và xem nó hoạt động như thế nào. – chotchki

+0

Tôi chưa hoàn thành nỗ lực di chuyển của mình (repo 30k + cam kết lớn) nhưng phương pháp này có vẻ đầy hứa hẹn. – chotchki

-2

Bạn cần sử dụng HotCopy để sao lưu thư mục lưu trữ. Sau đó, nó chỉ là vấn đề đơn giản là khôi phục kho lưu trữ.

+1

Tôi nghĩ rằng anh ấy đang nói về việc tước một cấu trúc rất phức tạp (với một số động tác bên trong nó) từ một repo có chứa nhiều hơn nữa. –

+0

Bạn không thể sử dụng bản sao nóng cho điều này, chỉ có thể được sử dụng để tạo bản sao đầy đủ của kho lưu trữ –

0

Có một giải pháp khác khá đơn giản và giải quyết sự cố "giữ nguyên di chuyển". Vui lòng xem đoạn cuối của mục nhập Câu hỏi thường gặp về Subversion Apache "How do I completely remove a file from the repository's history?". Giải pháp không dựa trên số svndumpfilter.

Bạn có thể thực hiện các bước sau:

  1. Configure path-based authorization quy tắc để chối đọc truy cập cho một tài khoản USERNAME đến PATHS của tập tin hoặc thư mục mà bạn muốn loại bỏ từ kho lịch sử.

    Hãy lưu ý danh từ số nhiều đường dẫn. Tệp hoặc thư mục mà bạn muốn loại bỏ có thể có các tên khác nhau hoặc có thể được đặt ở các vị trí khác nhau trong toàn bộ lịch sử kho lưu trữ. Hãy xem xét điều này khi thiết lập các quy tắc từ chối.

  2. Tạo một kho trống rỗng,

  3. Tái kho nguồn với svnsync công cụ để kho mục tiêu trong tài khoản USERNAME. Để biết chi tiết về đồng bộ hóa kho lưu trữ với svnsync, vui lòng tham khảo chương SVNBook "Repository Replication".

Không giống như svndumpfilter, svnsync tự động dịch svn copy hoạt động với một đường dẫn nguồn không đọc được vào bổ sung bình thường, đó là hữu ích nếu lịch sử liên quan đến hoạt động sao chép và vẫn cần phải được lọc. :)

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