Kontrola wersji dla Przepisz

29

Opracowaliśmy produkt (prototyp) P_OLD w języku X i teraz przepisujemy go od zera jako P_NEW w języku Y.

Ponieważ P_NEW i P_OLD są tym samym produktem:

Czy P_NEW powinien być po prostu starą wersją P_OLD, czy powinien być własnym repozytorium?

Jak zwykle radzić sobie z tak dużymi zmianami z perspektywy kontroli wersji?

1v0
źródło
powiązane (być może duplikat): wybranie jednego lub wielu projektów w repozytorium git?
komara
@gnat Dzięki za link. To ciekawe, ale główna różnica polega na tym, że dla nas jest to ten sam produkt, po prostu całkowicie przeprojektowany. Stary projekt był w zasadzie (brzydkim) prototypem.
1v0

Odpowiedzi:

46

Prawie na pewno chcesz nowego repozytorium.

Celem repozytorium jest:

  • do śledzenia historii i zmian, dzięki czemu można je łatwo porównywać
  • do zarządzania oddziałami i scaleniami, a nie tylko wysyłania pocztą elektroniczną plików łat i ręcznego stosowania ich do działających katalogów

Jeśli całkowicie przepisujesz projekt od zera, nie ma sensu umieszczać przepisywania w tym samym repozytorium. Nie będziesz mógł zastosować poprawek napisanych w starym języku do swojego przepisywania. Przełączanie repozytoriów nie sprawi, że historia starego repozytorium zniknie, a jeśli przełączysz się, nie będziesz mieć żadnych dziwnych etapów przejściowych, w których w repozytorium będą dwa języki.

Jedynym powodem, dla którego rozważałbym utrzymanie repozytorium przy zmianie języków, byłoby: a) języki są tak podobne, że kod można często wkleić z jednego miejsca na drugi bez wprowadzania zmian, lub b) masz projekt, w którym większość funkcjonalnej zawartości w kontroli wersji jest podobna do szablonów w zachowanym języku szablonów, a język rdzenia, który zmieniasz, jest tłumaczony wiersz po wierszu na inny język (i nawet wtedy, jeśli wiesz podczas migracji będziesz musiał powtarzać szablony).

użytkownik52889
źródło
2
W zależności od długości przejścia warto mieć poprzednie żywe i łatwo dostępne do porównań. Być może wprowadzasz przypadki testowe w starym systemie, aby pomóc ci sprawdzić, czy wyniki są zgodne w nowym systemie.
Eric
16

Zawsze sam umieszczam przepisywanie w nowych repozytoriach. W ten sposób kompilacje, testy i wdrożenia mogą być wykonywane niezależnie.

Kiedy przepisujesz projekt w innym języku, często podobieństwo w tych zadaniach, takich jak budowanie, uruchamianie testów i wdrażanie, jest bardzo niewielkie. Zaoszczędzisz sobie bólu, jeśli tylko odizolujesz je we własnym repozytorium. Wtedy będziesz musiał się tylko martwić bólem, w jaki sposób będziesz zarządzać użytkownikiem i przejściem danych ze starego systemu do nowego; to zawsze jest fajna rzecz. :)

dsw88
źródło
5

Jeśli twoje systemy są wystarczająco modułowe i kompatybilne z linkami, skorzystasz z jednego repozytorium i kompilacji. Na przykład, jeśli system C jest przepisywany w C ++, kod C ++ może wywoływać istniejącą funkcjonalność i stopniowo ją zastępować.

Jednak nawet w tym przypadku niektórzy mogą argumentować za uruchomieniem nowego repozytorium, w którym odpowiedni stary kod jest pobierany zgodnie z wymaganiami.

Keith
źródło