2009-07-20 25 views
6

Câu hỏi này tương tự như this onethis one, nhưng kịch bản hơi phức tạp hơn một chút.Git-svn hoạt động như thế nào với kho lưu trữ svn đã thay đổi bố cục?

Tôi bắt đầu một vài năm trước với một kho lưu trữ svn riêng (mà tôi sử dụng chủ yếu cho các tệp cấu hình được chia sẻ và tương tự giữa các máy khác nhau). Tôi đã không quá cẩn thận với cách bố trí của kho lưu trữ (nơi chi nhánh, đi, vv), do đó, nó thay đổi khá nhiều theo thời gian. Đây là, tất nhiên, một sai lầm, nhưng đã quá muộn rồi. Gần đây hơn, tôi đã di chuyển nó sang một bố cục svn trunk/branches/tags chuẩn, chủ yếu với các lệnh di chuyển svn, nhưng tất nhiên lịch sử cũ vẫn còn hiện diện trong kho (và, thẳng thắn, một chút lộn xộn) .

Tôi muốn chuyển đổi vĩnh viễn này thành kho lưu trữ git. Tôi đã thử sử dụng git-svn, nhưng nó chỉ có vẻ xử lý các tình huống mà một quy ước/nhánh/thẻ nhất quán đã được tuân theo (có, bạn có thể cung cấp các tên thay thế, nhưng chỉ có một tên cho mỗi nó xuất hiện). Rất nhiều lịch sử của kho lưu trữ của tôi có thân cây hiệu quả trong thư mục gốc của kho lưu trữ, ví dụ, với các thẻ/và các nhánh/như thư mục con.

Cách tốt nhất để xử lý tất cả điều này là gì? Lý tưởng nhất là tôi muốn kho git tôi kết thúc với ít nhất có tất cả lịch sử có thể truy cập theo một cách nào đó, ngay cả khi các nhánh và thẻ không được biểu diễn đúng như các khái niệm hạng nhất trong git.

Cụ thể hơn, cách svn-git xử lý các tệp bên ngoài thư mục con/nhánh/thẻ được cung cấp? Quan sát của tôi cho đến nay là nó bỏ lỡ chúng ra đôi khi (chắc chắn không OK), và lần khác thêm chúng vào kho lưu trữ mới.

Bất kỳ suy nghĩ nào cũng sẽ được đánh giá cao.

+0

Bạn hỏi làm thế nào nó sẽ cư xử mà còn nói rằng bạn đã thử nó. Ví dụ cụ thể về hành vi không mong muốn mà bạn đã quan sát thấy sẽ hữu ích. Git thường tuyệt vời khi xử lý các kết hợp phức tạp, ví dụ: thay đổi và di chuyển một cây con trong cùng một cam kết. –

+0

OK - Tôi đã thử. Tôi thừa nhận tôi có thể không có kết quả hoàn toàn, nhưng quan sát bề ngoài của tôi chắc chắn rằng git-svn dường như bao gồm một số thư mục từ gốc svn (tức là bên ngoài thư mục trunk/branches/tags), nhưng không phải là các thư mục khác. Tôi đã nhầm lẫn là tại sao. git chắc chắn có khả năng xử lý các kết hợp phức tạp, nhưng tôi nghĩ rằng câu hỏi này là nhiều hơn về git-svn hơn git chính nó. –

+0

sử dụng thẻ ['svn'] thay vì thẻ [' subversion'] http://meta.stackexchange.com/questions/2601/batch-retag-request-merge-svn-and-subversion –

Trả lời

2

Theo kinh nghiệm của tôi, cách duy nhất để xử lý việc này là theo dõi vị trí của kho lưu trữ trong suốt thời gian và tạo một bản sao git-svn riêng biệt cho từng giai đoạn dự án ở một vị trí.

Sau khi bạn đã tạo các kho lưu trữ cho các giai đoạn khác nhau theo thời gian (hoặc ít nhất là ngược lại khi bạn có thể bị làm phiền), bạn có thể ghép các kho lưu trữ lại với nhau.

tôi đã tạo ra một hình màn ảnh thể hiện kỹ thuật này ở đây:

http://blog.tfnico.com/2010/10/gitsvn-6-grafting-together-svn-history.html

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