Thực hành kiểm soát phiên bản cho Rewrites


29

Chúng tôi đã phát triển một sản phẩm (nguyên mẫu) P_OLD bằng ngôn ngữ X và hiện chúng tôi đang viết lại từ đầu với tên P_NEW bằng ngôn ngữ Y.

Vì P_NEW và P_OLD là cùng một sản phẩm:

P_NEW chỉ nên là một nhánh của P_OLD cũ hay nó nên là kho lưu trữ của riêng nó?

Cách thông thường để xử lý các thay đổi lớn như vậy tạo thành phối cảnh kiểm soát phiên bản là gì?


liên quan (có thể là một bản sao): Lựa chọn giữa một hoặc nhiều dự án trong kho git?
gnat

@gnat Cảm ơn các liên kết. Thật thú vị, nhưng sự khác biệt chính là đối với chúng tôi, đó là cùng một sản phẩm, được thiết kế lại hoàn toàn. Dự án cũ về cơ bản là một nguyên mẫu (xấu xí).
1v0

Câu trả lời:


46

Bạn gần như chắc chắn muốn có một kho lưu trữ mới.

Mục đích của kho lưu trữ là:

  • để theo dõi lịch sử và thay đổi để bạn có thể so sánh chúng dễ dàng
  • để quản lý các chi nhánh và hợp nhất thay vì chỉ gửi email các tệp vá xung quanh và áp dụng chúng vào các thư mục làm việc theo cách thủ công

Nếu bạn hoàn toàn viết lại một dự án từ đầu thì không có lý do gì để viết lại vào cùng một kho lưu trữ. Bạn sẽ không thể áp dụng các bản vá được viết bằng ngôn ngữ cũ để viết lại. Chuyển đổi repos sẽ không làm cho lịch sử trong repo cũ biến mất, và nếu bạn chuyển đổi, bạn sẽ không có bất kỳ giai đoạn tạm thời kỳ lạ nào khi bạn có hai ngôn ngữ đá trong vòng repo của mình.

Lý do duy nhất tôi thậm chí sẽ cân nhắc việc giữ kho lưu trữ khi thay đổi ngôn ngữ là nếu a) các ngôn ngữ giống nhau đến mức mã thường có thể được sao chép từ cái này sang cái khác mà không thực hiện bất kỳ thay đổi nào, hoặc b) bạn có một dự án trong đó phần lớn nội dung chức năng trong kiểm soát phiên bản là một cái gì đó giống như các mẫu trong ngôn ngữ tạo khuôn mẫu mà bạn đang giữ và ngôn ngữ của lõi mà bạn đang thay đổi sẽ được dịch từ dòng sang ngôn ngữ khác (và thậm chí chỉ khi bạn biết bạn sẽ cần tiếp tục lặp lại các mẫu trong quá trình di chuyển).


2
Tùy thuộc vào độ dài của quá trình chuyển đổi, thật hữu ích để có thể so sánh được trước đó và có thể truy cập dễ dàng để so sánh. Bạn thậm chí có thể giới thiệu các trường hợp thử nghiệm trong hệ thống cũ để giúp bạn xác thực kết quả khớp với hệ thống mới.
Eric

16

Tôi luôn luôn viết lại trong kho mới. Bằng cách đó, các bản dựng, kiểm tra và triển khai đều có thể được thực hiện độc lập.

Khi bạn viết lại một dự án bằng ngôn ngữ khác, thường có rất ít sự tương đồng trong bất kỳ nhiệm vụ nào như xây dựng, chạy thử nghiệm và triển khai. Bạn sẽ tự cứu mình khỏi nỗi đau nếu bạn chỉ cách ly chúng trong kho lưu trữ của riêng chúng. Sau đó, bạn sẽ chỉ cần lo lắng về nỗi đau của cách bạn sẽ quản lý người dùng và chuyển dữ liệu từ hệ thống cũ sang hệ thống mới; đó luôn là một điều thú vị :)


5

Nếu hệ thống của bạn đủ mô-đun và tương thích liên kết, bạn sẽ được hưởng lợi từ một kho lưu trữ và xây dựng. Ví dụ: nếu hệ thống C đang được viết lại trong C ++, mã C ++ có thể gọi chức năng hiện có và thay thế dần dần.

Tuy nhiên, ngay cả trong trường hợp này, một số người có thể lập luận để bắt đầu một repo mới trong đó mã cũ có liên quan được kéo vào theo yêu cầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.