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.
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łąź)
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
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.
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ą.
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ł:
- Połącz się z kilku gałęzi.
- Niech wszystkie połączenia zostaną odpowiednio zapisane jako takie.
- 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...)
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