Jak scalić gałąź z powrotem do trunka w SVN z całą historią zatwierdzeń?

Jak scalić gałąź z powrotem do trunka w SVN z całą historią zmian? Wiem, że w Git mogę używać

merge -squash

Czy Jest jakieś równoważne polecenie w SVN? Używam SVN 1.6.

 25
Author: zsong, 2010-08-20

5 answers

W Subversion 1.5 lub nowszym scalanie jest rejestrowane na lokalnej kopii roboczej we właściwości svn: mergeinfo. Więc ta informacja nie jest stracona.

Możesz zobaczyć scalone wersje, jeśli użyjesz svn log -g zamiast zwykłego svn log.

Zwykłe połączenia są wykonywane jako

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc 

Ale jeśli używasz gałęzi, czasami wygodniej jest użyć połączenia reintegracyjnego. W tym przypadku należy najpierw scalić wszystkie zmiany truna z gałęzią używając czegoś w rodzaju

svn merge svn://server/trunk my_branch_wc

(to łączy wszystko, co jeszcze nie zostało połączone)

I po zatwierdzeniu tej zmiany do gałęzi możesz użyć

svn merge --reintegrate svn://server/branch my_trunk_wc

Aby przenieść wszystkie zmiany jako pojedynczy commit. (Po tej operacji należy usunąć gałąź)

 37
Author: Bert Huijben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-30 19:12:02

Jestem trochę zardzewiały z scalaniem, ale czy to nie powinno zadziałać ?

svn merge -rREV1:REV2 svn://server/branch my_trunk_wc

Zobacz:

svn merge --help
 5
Author: DarkDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 14:58:39

Możesz zapisać każdy zestaw zmian jako diff, a następnie zatwierdzić każdy na szczycie bagażnika. Jest to powszechnie nazywane "przesadzaniem" i istnieją różne narzędzia do tego automatycznie.

 1
Author: Borealid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 14:54:11

Aby utworzyć scalenie gałęzi i utworzyć pojedynczy commit dla każdego commita w gałęzi możesz użyć skryptu, używam następującego:

#/bin/bash

BRANCH="http://your branch url"

for i in {1127..1138} # list of revisions
do
  REV=$i
  echo $REV $BRANCH
  echo merged $REV from $BRANCH > tmps.commit
  svn log -c $REV $BRANCH >> tmps.commit
  svn up
  svn merge -c $REV $BRANCH ./
  svn commit -F tmps.commit
  rm tmps.commit
done

To sprawdzi każdą poprawkę, którą określisz dla konkretnej gałęzi i wykona commit w bieżącym katalogu, zachowując w ten sposób każdą pojedynczą zmianę z odpowiednią wiadomością.

 1
Author: Elmar Weber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-31 18:49:33

To brzmi jakbyś chciał:

  1. Połącz się z kilku gałęzi.
  2. Niech wszystkie połączenia zostaną odpowiednio zapisane jako takie.
  3. Commit tylko jako jedna nowa wersja.

Myślę, że jest to wspierane przez podstawową architekturę SVN. Ale nie wiem, czy są jakieś klienty, które go dostarczają (chociaż svnmucc zrobi to dla wielu cp, mv, rm polecenia). Chyba, że chcesz zrobić więcej badań niż ja (co nie zajmie dużo), lub napisać własne klient, który może napędzać biblioteki SVN do tego (co może być trudne, ale nadal wykonalne); wtedy myślę, że będziesz musiał poświęcić jedną z 2. i 3. powyżej.

(jeśli poświęcisz 3, możesz natychmiast zrzucić repozytorium i zhakować plik zrzutu, aby użyć tylko jednej rewizji, ale nie sądzę, że warto ryzykować tylko po to, aby mieć znacznie prostszą historię rewizji...)

 0
Author: Edmund,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-24 02:48:23