Chúng tôi có một kho lưu trữ subversion không chuẩn mà chúng tôi muốn chuyển đổi sang Git. Vấn đề là tôi không thực sự biết bắt đầu từ đâu để đảm bảo rằng chúng tôi giữ được lịch sử đầy đủ nhưng không kết thúc với một mớ hỗn độn hoàn chỉnh.Cách xử lý nhập khẩu phụ không chuẩn cho Git
Kho lưu trữ của chúng tôi có 6 năm lịch sử cuối cùng cho bộ sản phẩm của công ty chúng tôi và đã trải qua nhiều cấu trúc lại. Trong mọi trường hợp, chúng tôi có nền tảng mã nền tảng cốt lõi và sau đó là một số dự án/plugin kết hợp theo những cách khác nhau trên nền tảng cốt lõi.
Cặp đôi đầu tiên của năm đã được cấu trúc như:
-- plugin1
- trunk
- branches
- tags
-- pluginX
- trunk
- branches
- tags
-- trunk (core platform)
- <various sub dirs)
-- branches (various feature branches of the entire repository)
- refactoring1
- refactoringX
-- tags (various tags of customer releases of full respository)
- customerX_1.x
-- vendor (vendor drops and tracking of 3rd party source deps)
- 3rd_party_code_A
- 3rd_party_code_X
Theo thời gian chúng tôi đã thêm một vài chi tiết các thư mục là thư mục gốc bao gồm:
-- releases (replaced tags; branches for released stable versions of repos)
-- sandbox (area for misc projects of interest; should have been new repo)
Sau đó, chúng tôi làm sạch này lên và kết thúc với:
-- trunk
- platform
- plugin1
- pluginX
-- stable (stable release branches of trunk)
- 1.1
- 1.2
-- tags (release points; marks a point on a stable branch)
- 1.1.1
- 1.1.2
-- vendor
-- sandbox
-- releases (copies of old releases of interest)
Vì vậy, đó là lịch sử của chúng tôi. Những gì chúng tôi muốn kết thúc với hy vọng là sạch hơn nhiều. Ngay bây giờ chúng ta đang nghĩ về cơ sở của kho git trông như thế này (về cơ bản là một bản sao của thư mục 'trunk' trước đó).
- platform
- plugin1
- pluginX
Branches:
- stable/1.1
- stable/1.2
Tags:
- rel/1.1.1
- rel/1.1.2
Chúng tôi muốn đặt sandbox và nhà cung cấp vào kho lưu trữ của riêng họ. (không chắc chắn làm thế nào để làm điều này, nhưng có lẽ có một cách để nhập khẩu chỉ một tập hợp con của một kho svn)
Theo như các chi nhánh và thẻ, chúng tôi muốn mã từ 'ổn định' để kết thúc như là chi nhánh, mã từ 'thẻ' để kết thúc dưới dạng thẻ thành ổn định.
Đối với lịch sử cũ hơn từ cấu trúc ban đầu, chúng tôi muốn giữ càng nhiều lịch sử càng tốt nhưng không muốn làm ô nhiễm kho lưu trữ mới. Ví dụ, nếu chúng ta có thể nhìn lại và thấy những thay đổi đã xảy ra trên các nhánh tái cấu trúc sẽ là tuyệt vời nhưng không hoàn toàn cần thiết.
Hiện tại chúng tôi đang tranh luận về cách tiến hành và cách để mọi thứ được tái cơ cấu và nhập khẩu một cách rõ ràng. Ít nhất chúng ta cần là một cách để có một lịch sử đầy đủ của nền tảng và mã plugin trên cả hai cấu trúc tái cấu trúc trước đó. Nếu có thể, chúng tôi cũng muốn nhận được thông tin ổn định và thẻ từ cấu trúc kho lưu trữ gần đây nhất.
Có ai có đề xuất về cách thực hiện việc nhập này không?
Ví dụ:
- Có thể giữ đầy đủ lịch sử qua tái cơ cấu?
- Chúng ta có nên viết lại kho lưu trữ lật đổ bằng cách nào đó để xóa nó trước khi nhập và nếu có thì làm thế nào?
- Chúng ta có nên nhập toàn bộ lịch sử và sau đó tái cấu trúc nó trong Git và như thế nào?
- Bất kỳ ý tưởng nào về cách làm cho việc nhập này trở nên sạch sẽ?
plugin1 và pluginX về cơ bản là bản repos độc lập với thân cây/nhánh/thẻ của chính nó, đúng không? – prusswan
Đó là cách họ bắt đầu nhưng chúng tôi thấy rằng nó không hoạt động tốt vì mã tất cả thay đổi cùng một lúc. Vì vậy, chúng tôi chuyển sang cấu trúc kho lưu trữ thứ hai. Cấu trúc đó hoạt động rất tốt cho chúng ta bây giờ và chúng tôi muốn giữ nó với Git, chỉ quan tâm đến việc làm thế nào để giữ cho lịch sử cùng đi. – Allen
Để giữ lịch sử đầy đủ, tôi cho rằng đó là vấn đề tìm ra nhánh nào nên ánh xạ đường dẫn nào, và rất nhiều kiên nhẫn (nhân bản git-svn mất rất nhiều thời gian cho svn với lịch sử sâu). Về cơ bản những thân cây đó sẽ trở thành nhánh git anyway (mặc dù bạn có thể chỉ định một trong số chúng là trunk/master vốn vẫn là một nhánh) – prusswan