Jaki jest najlepszy sposób, aby uczynić jedną z gałęzi repozytorium subversion nowym linkiem?
Nastąpił poważny przepis na cały system: rzeczy zostały przeniesione, przepisane, zastąpione, usunięte, przemianowane itp. Przepisany kod został przetestowany i jest gotowy do zastąpienia starego bagażnika.
Zasadniczo stara główna linia (Trunk 5) jest oznaczona i kończy się tutaj. Przepisana gałąź (Gałąź 6) ma stać się nową linią główną (Pień 7):
Bagażnik (1) -> Bagażnik (2) -> Bagażnik (5) -> × + -> nowy Bagażnik (7) \ \ | scalać widelec ??? \ \ | + -> Oddział (3) -> Oddział (4) -> Oddział (6) - +
Wszystkie bieżące zmiany ze starego „Pnia” są już włączone do „Przepisanej gałęzi”
W jaki sposób mogę to zrobić?
źródło
Zgadzam się z użyciem polecenia svn move do osiągnięcia tego celu.
Wiem, że inni uważają to za niezwykłe, ale ja lubię to robić w ten sposób. Kiedy mam gałąź funkcji i jestem gotowy do scalenia go z pniem, który również został znacząco zmodyfikowany, połączę go z nową gałęzią, zwykle o nazwie
<FeatureBranchName>-Merged
. Następnie rozwiązuję konflikty i testuję scalony kod. Po zakończeniu przenoszę bagażnik do folderu tagów, aby nic nie zgubić. Wreszcie przenoszę<FeatureBranchName>-Merged
się do bagażnika.Ponadto wolę unikać kopii roboczej podczas wykonywania ruchów, oto przykłady poleceń:
Uwaga: używam 1.5
źródło
Właśnie ostatnio przyglądałem się temu problemowi i rozwiązaniem, z którego byłem bardzo zadowolony, było działanie
svn merge --ignore-ancestry trunk-url branch-url
na kopii roboczej mojego bagażnika.
Nie jest to próba wprowadzania zmian w sposób historyczny (utrzymanie zmian w pniu). Po prostu „stosuje różnicę” między pniem a gałęzią. Nie spowoduje to żadnych konfliktów dla użytkowników w plikach, które nie zostały zmodyfikowane. Jednak utracisz informacje historyczne z oddziału, ale dzieje się tak, gdy i tak dokonasz scalenia.
źródło
Zaleca się wprowadzenie tych zmian za pomocą narzędzia przeglądarki repozytorium.
Próba dużych operacji usuwania i przenoszenia za pośrednictwem kopii roboczej to świetny sposób na zabicie kopii roboczej. Jeśli jesteś zmuszony do używania kopii roboczej, wykonaj zatwierdzanie przyrostowe po każdej operacji usuwania lub przenoszenia i ZAKTUALIZUJ swoją kopię roboczą po każdym zatwierdzeniu.
źródło
Jeśli chcesz, aby gałąź stała się nowym linkiem (tj.) Pozbyła się wszystkich zmian w linii głównej, które zostały wprowadzone od czasu utworzenia gałęzi, możesz: 1. Utworzyć gałąź linii głównej (do celów kopii zapasowej) 2. "cofnąć zmiany "na linii głównej (wybierz wszystkie wersje po utworzeniu gałęzi 3. Scal gałąź z powrotem do linii głównej.
Historia powinna tak pozostać.
Pozdrawiam, Roger
źródło
Rozwiązania @Aaron Digulla i @kementeus są wykonalne. W przypadku repozytoriów Subversion 1.4 operacje kopiowania / przenoszenia mogą utrudnić przyszłą migrację do innej struktury repozytoriów lub podział repozytoriów.
Uważam, że ulepszenia 1.5 obejmują lepszą rozdzielczość historii przenoszenia / kopiowania, więc prawdopodobnie nie byłby to problem dla repozytorium 1.5.
W przypadku repozytorium 1.4 zalecałbym użycie
svnadmin dump
isvndumpfilter
wykonanie przeniesienia istniejącego pnia w inne miejsce, a następnie przeniesienie gałęzi do pnia za pomocą tego samego mechanizmu. Załaduj dwa pliki zrzutu do repozytorium testowego, sprawdź, a następnie przenieś je do środowiska produkcyjnego.Oczywiście przed rozpoczęciem wykonaj kopię zapasową istniejącego repozytorium.
Pozwala to zachować historię bez jawnego rejestrowania przeniesienia / kopii i ułatwia przyszłą reorganizację, zachowując historię.
Edycja: zgodnie z żądaniem, dokumentacja zachowania 1.4, z książki 1.4 Red-Bean, Filtering Repository History
Dotyczy to migracji / reorganizacji przy użyciu
svndumpfilter
. Są chwile, kiedy odrobina dodatkowej pracy teraz może zaoszczędzić wiele dodatkowej pracy później, a dzięki łatwemu wykorzystaniusvndumpfilter
dostępnej dla przyszłych migracji / reorganizacji ryzyko zmniejsza się przy stosunkowo niskich kosztach.źródło
Chociaż powyższe odpowiedzi będą działać, nie są one najlepszą praktyką. Najnowszy serwer svn i ścieżka klienta łączą się dla Ciebie. Więc svn wie, które wersje zostały scalone w gałąź i skąd. To bardzo pomaga w utrzymywaniu aktualności gałęzi, a następnie łączeniu jej z powrotem w pniu.
Bez względu na to, której wersji Subversion używasz, istnieje najlepsza metoda postępowania w celu uzyskania zmian w gałęzi z powrotem do linii głównej. Jest to opisane w podręczniku Subversion: Kontrola wersji z Subversion, rozdział 4. Rozgałęzianie i łączenie, utrzymywanie synchronizacji gałęzi .
źródło
To naprawdę dziwna / nietypowa konfiguracja w SVN, nawet jeśli myślę, że wcale nie jest to „dobra praktyka”, i tak myślę, że możesz zrobić coś takiego:
Powodzenia
źródło