2013-03-21 103 views
19

Od tak dawna użytkownik SVN, ale dość niedoświadczony w rozgałęzieniach/tagowaniu, a kiedy już podejrzewam, nie używam go właściwie ani w pełni jego potencjału.Strategia SVN używająca rozgałęzień i scalająca zmiany z pnia do gałęzi

Mam swój bagażnik, który pracuję nad dodawaniem nowych funkcji itp. Ta baza kodu jest używana w wielu witrynach, gdzie tworzymy oddział z pnia na podstawie projektu.

Każda gałąź ma zazwyczaj modyfikacje charakterystyczne dla tego projektu, a wszystko, co naszym zdaniem będzie możliwe do ponownego wykorzystania, zostanie dodane do pnia i będzie można włączać i wyłączać tę funkcję w różnych projektach.

Obecnie, kiedy wprowadzamy zmiany w bagażniku i chcemy wprowadzić te modyfikacje w uprzednio datowanym oddziale, muszę przejść i ręcznie scalić niektóre zmiany w oddziale i ponownie je wprowadzić. Nie idealne i łatwe do przegapienia rzeczy.

Więc moje pytanie ... jest jakiś sposób, aby zaktualizować swój oddział ze wszystkimi zmianami w bagażniku, i radzić sobie z nimi, jak gdyby to była średnia zmiana bagażnik z konfliktami?

Widziałem o reintegracji gałęzi do pnia, ale ze względu na sposób, w jaki używam oddziałów w tym przypadku, nie jest to naprawdę coś, co chcę zrobić.

+0

Czy używasz programu svn z wiersza poleceń lub używasz takiego jak TortoiseSVN? –

+5

Tak więc, byłem użytkownikiem SVN od prawie tak długo, jak to było w pobliżu. I choć możesz walczyć z SVN, aby zrobić z tego co chcesz, muszę być szczery: git jest o wiele lepszy w tym. Zostało zaprojektowane dokładnie o tym, o czym mówisz (ale pomyśl "jeszcze więcej gałęzi"). Jeśli chcesz dużo scalać i śledzić rzeczy, zamieniłbym twoje repozytorium SVN na repozytorium git i odejdę. Będziesz szczęśliwszy (wiem, że jestem o wiele bardziej pewny, że moje łatki są stosowane wszędzie po konwersji 10-letniego projektu SVN na GIT). –

+0

Używam kombinacji smartsvn (prawdopodobnie więcej) i linii poleceń – Horse

Odpowiedz

22

Tak, jest to możliwe. Zasadniczo trzeba uruchomić svn merge z czystej kopii roboczej swojego oddziału (jeden bez lokalnymi modyfikacjami):

$ pwd 
/home/user/mybranch 
$ svn status # Does not display anything 
$ svn update # Make sure your local copy is up to date. 
Updating '.': 
At revision X. 
$ svn merge url/to/repository/trunk 
Updates, additions, deletions and conflicts. 
$ #handle conflicts. 
$ svn commit -m "Merging changes from the trunk". 

Zobacz Keeping a Branch in Sync z książki SVN.

Pierwsza fuzja prawdopodobnie doprowadzi do wielu konfliktów, zwłaszcza jeśli gałąź rozwidla się dawno temu, ale późniejsza fuzja przejdzie gładko, zwłaszcza jeśli często się scalisz.

+0

działa idealnie! dzięki – gnuyoga

+0

Zrobiłem to i po, kiedy próbowałem zaktualizować bagażnik z brach, wszystkie nowe klasy zaktualizowane z ciężarówki były w konflikcie. Czy zrobiłem coś nie tak? Czy to musi się stać w ten sposób? – Sertage