Dựa trên một số câu trả lời khác cho câu hỏi này, tôi đã đưa ra một tập lệnh Ruby xử lý việc di chuyển git-svn. Bạn có thể tìm thấy nó tại https://gist.github.com/henderea/6e779b66be3580c9a584 .
Nó xử lý việc di dời mà không cần kiểm tra một bản sao khác và thậm chí nó còn xử lý trường hợp có những thay đổi chưa được đẩy trong một hoặc nhiều nhánh (vì điều đó phá vỡ logic thông thường). Nó sử dụng nội dung từ câu trả lời nhánh bộ lọc git (cho logic chính) và câu trả lời về việc sao chép các nhánh từ phiên bản repo này sang phiên bản khác (để sao chép các nhánh với các thay đổi chưa được đẩy).
Tôi đã sử dụng điều này để di chuyển một loạt các repo git-svn mà tôi có cho công việc và phiên bản script này (tôi đã trải qua vô số lần lặp lại) dường như phù hợp với tôi. Nó không phải là quá nhanh, nhưng nó dường như xử lý tất cả các trường hợp tôi gặp phải và dẫn đến một repo được chuyển vị trí hoàn toàn.
Tập lệnh cung cấp cho bạn tùy chọn tạo bản sao của repo trước khi thực hiện bất kỳ thay đổi nào, vì vậy bạn có thể sử dụng tùy chọn này để tạo bản sao lưu. Cần tạo bản sao nếu bạn có các thay đổi chưa được đẩy trong bất kỳ nhánh nào.
Tập lệnh không sử dụng bất kỳ đá quý hoặc thư viện nào khác không có trong cài đặt MRI Ruby thông thường. Nó sử dụng các thư viện readline và fileutils có trong MRI.
Hy vọng rằng kịch bản của tôi sẽ hữu ích cho người khác. Vui lòng thực hiện thay đổi đối với kịch bản.
LƯU Ý: Tôi chỉ thử nghiệm tập lệnh này với git 2.3.0 / 2.3.1 và Ruby 2.2.0 trên OS X 10.10 Yosemite (vì đó là môi trường tôi sử dụng), nhưng tôi mong đợi nó cũng hoạt động trên các môi trường khác. Tuy nhiên, không có gì đảm bảo về Windows.