2011-02-15 15 views
14

Podczas refaktoryzacji, czasami muszę podzielić jeden plik źródłowy na dwa lub więcej (na przykład, gdy klasa stała się tak duża, że ​​powinna zostać podzielona na dwie klasy).Podział plików przy zachowaniu historii w SVN

Na przykład niech A będzie oryginalnym plikiem, a B1 i B2 nowymi plikami.

Czy można powiedzieć SVN, że B1 i B2 powinny "odziedziczyć" pełną historię pliku A, więc gdy przyjrzę się dziennikom historii B1 i B2, widzę, że zostały wyrzucone z a i dzienniki wyglądać następująco:

A    B1     B2 
- change A3  - change B1.2  - change B2.2 
- change A2  - change B1.1  - change B2.2 
- change A1  - change A3   - change A3 
       - change A2   - change A2 
       - change A1   - change A1 

wiem, jak zachować historię kiedy zmienić nazwę pliku (jak omówione here on SO), ale AFAIK to jest tylko sposób, aby zachować historię powiązana z jedną B1 lub B2, nie oba.

Obecnie używam Tortoise SVN 1.6.12 w systemie Windows.

+3

To pytanie jest metaforą zróżnicowanych terminów podróży w czasie, prawda, Doc? –

+0

@ACK_stoverflow: dostałeś mnie ;-) –

Odpowiedz

22

Tylko 2 SVN kopii pliku A, a następnie SVN usunąć pliku A.

Właśnie wykonany szybki test z nowym repo i wydaje się doskonale działa.

  1. stworzyłem plik A.txt o dwie klasy B1 i B2 wewnątrz i zaangażowanej pliku a.txt
  2. Zrobiłem SVN kopię A.txt do B1.txt i usunąć deklarację klasy B2 z B1 .txt
  3. zrobiłem kolejny sVN kopię A.txt do B2.txt i usunąć deklarację klasy B1 z B2.txt
  4. i sVN usunięty A.txt
  5. zaangażowani wszystko i historia wygląda dobrze.
+7

Uwaga: wykonanie kopii pliku przy użyciu TortoiseSVN jest najłatwiejsze dzięki przeciągnięciu pliku za pomocą prawego klawisza myszy. Menu kontekstowe pokazuje niektóre opcje, takie jak kopiowanie SVN i ruch SVN, z możliwością jednoczesnej zmiany nazwy. – jbvo

+0

Czy istnieje sposób na SVN Kopiowanie pro gramatyczne z kodu .Net? Muszę wykonać powyższe kroki automatycznie. Wykrywanie klas w plikach i radzenie sobie z nimi może odbywać się semantycznie przy użyciu Microsoft Roslyn (dla kodu .Net). –