2010-12-13 12 views
10

Wykonuję refaktoryzację mojego projektu C++ zawierającego wiele plików źródłowych. Obecny etap refaktoryzacji obejmuje dołączenie dwóch plików (na przykład x.cpp i y.cpp) do większego (np. xy.cpp) z wyrzuceniem kodu i dodaniem do niego jeszcze jednego kodu.Jak połączyć dwa pliki w systemie kontroli wersji

Chciałbym powiedzieć mój system kontroli wersji (Perforce, w moim przypadku), że wynikowy plik jest oparty na dwóch poprzednich plikach, więc w przyszłości, gdy spojrzę na historię zmian xy.cpp, widzę również wszystkie zmiany wprowadzone kiedykolwiek do x.cpp i y.cpp.

Perforce obsługuje zmianę nazwy plików, więc jeśli y.cpp nie istniał, wiedziałbym dokładnie, co robić. Perforce obsługuje również łączenie, więc gdybym miał dwie różne wersje xy.cpp, mogłaby utworzyć z niego jedną wersję. Z tego, wiem, że dołączenie dwóch różnych plików jest możliwe (nie jestem pewien); jednakże przeszukałem dokumentację dotyczącą Perforce i innych systemów kontroli kodu źródłowego i nie znalazłem nic przydatnego.

Czy staram się w ogóle to zrobić?
Czy ma tradycyjną nazwę (przeszukiwanie dokumentacji "scalanie" lub "dołączanie" nie powiodło się)?

+2

+1 dopóki nie zapytałeś, nigdy nie przyszło mi do głowy, jak użyteczne może być coś takiego. –

Odpowiedz

1

Nie sądzę, że można to zrobić w klasycznym systemie VCS.
Te systemy wersjonowania są w dwóch smakach (zjeżdżalnia 50+ z Getting git by Scott Chacon): historia

  • delta opartym: wziąć jeden plik i zapisz swoją deltę. W tym przypadku jednostka będąca plikiem nie może powiązać swojej historii z innym plikiem.

  • Historia oparta na DAG: bierzesz jedną zawartość i rejestrujesz jej łatki. W tym przypadku sam plik może się różnić (może być dowolnie zmieniany/zmieniany) i może być wynikiem dwóch innych treści (więc jest bliski tego, co chcesz) ... ale wciąż w historii jeden plik (zawartość pochodząca z różnych gałęzi jego DAG).

alt text

3

można spróbować integracji z bezpodstawnych scala (-I w linii komend). Jeśli dobrze zrozumiem dokumentację (i nigdy jej nie użyłem), wymusi to integrację dwóch plików. Następnie musisz rozwiązać integrację, jak tylko wybierzesz, czego rezultatem będzie coś zbliżonego do pliku, który wymyślisz.

Po wykonaniu tej czynności zakładam, że historia Perforce pokazuje integrację z niepowiązanego pliku w jego historii integracji, umożliwiając śledzenie z powrotem do tego pliku, gdy jest to pożądane.

+0

Próbowałem to zrobić; nie działa. Sugerował, że powinienem wykonać trójstronne scalenie z pierwszą (starą) wersją 'x.cpp' jako" wersją podstawową ". – anatolyg

1

najłatwiejsza część byłaby to:

p4 edit x.cpp y.cpp 
p4 move x.cpp xy.cpp 
p4 move y.cpp xy.cpp 

Następnie Najtrudniejszą częścią staje rozwiązaniu ruch y.cpp i robi swoje refaktoryzacji. Ale to pokaże Perforce, że pliki są połączone.