Czy niedogodności związane z łączeniem się w SVN przed wersją 1.5 są już przestarzałe, gdy brak metadanych już nie ma miejsca?


11

Zaczynam od SVN i tak wiele źródeł mówi, że scalanie jest bardzo trudne w SVN w porównaniu do narzędzi DVCS. Do Aktualne pytania mogę znaleźć tutaj na SE są od 2012 roku.

Czasami pojawia się wzmianka, że ​​przyczyną jest to, że SVN przed wersją 1.5 nie miał metadanych, ale SVN jest teraz w wersji 1.8.9.

Biorąc pod uwagę, że SVN jest teraz znacznie bardziej dojrzały niż wersja 1.5, a zwłaszcza fakt, że nie użyliśmy SVN 1.5, więc nie cierpimy z powodu wspomnianego braku metadanych - czy nadal jest wiele trafności w tych argumentach przeciwko SVN?

Rozumiem, że DVCS ma zupełnie inne podejście, które jest często bardziej pożądane, ale dla tych, którzy „muszą” używać SVN z jakiegokolwiek powodu, łączenie nie jest już tak naprawdę „piekłem”, prawda?


3
@ TorbenGundtofte-Bruun - Nie mam teraz czasu, aby udzielić takiej odpowiedzi, ale powiem „nie bój się SVN”. Ma ograniczenia, ale i DVCS.
kdgregory

Odpowiedzi:


15

Działa dobrze, jeśli trzymasz się prostych przypadków , ale są pewne skomplikowane, które nie.

Ograniczenia, o których mogę myśleć:

  • Może znaleźć najnowszego przodka tylko wtedy, gdy znajduje się w jednej z zaangażowanych gałęzi. Więc jeśli tworzysz branches/thisi branches/thatzarówno z trunk, a następnie spróbuj połączyć branches/thissię branches/that, nie będzie wiedział, co zrobić. Co oznacza, że ​​możesz scalić gałąź tylko z jej rodzica. Możesz się z tym spotkać, jeśli uruchomisz dwie gałęzie funkcji, a później uświadomisz sobie, że funkcje są od siebie zależne i musisz je połączyć.

  • Chociaż twierdzi, że może śledzić zmiany nazw, łączenie gałęzi, gdy pliki zostały przeniesione z jednej strony i zmodyfikowane z drugiej strony, nie zawsze znajduje odpowiednie pliki do scalenia, a ręczne naprawianie jest nieco żmudne, ponieważ nie pozostawia niezbędnych informacji w dowolnym miejscu na dłoń.

  • Dodane pliki czasami powodują fałszywe konflikty przy późniejszych scaleniach.

  • Ponieważ subversion nie ma osobnej koncepcji gałęzi, możesz scalić tylko poddrzewo projektu, co może dość szybko doprowadzić do wielkiego bałaganu. Zdecydowanie zaleca się, aby zawsze łączyć pełne gałęzie. Niestety z jakiegoś powodu czasami informacje o scalaniu pojawiają się w podkatalogach, nawet jeśli wydają się zbędne, a scalanie zostało poprawnie wykonane dla całej gałęzi.

  • Wreszcie jest powolny . Połączenie projektu o dowolnej wielkości często zajmuje kilka minut, a większość DVCS może to zrobić w ciągu sekundy.


+1, świetna odpowiedź. Sprawa dotycząca wspólnego przodka jest czymś, na co muszę uważać. Czy masz jakieś odniesienia do tych faktów?
Doval,

1
@Doval: Doświadczenie.
Jan Hudec

być może warto również wspomnieć, że svn nie ma też oddzielnej koncepcji tagów
jk.

Jeśli chodzi o twój pierwszy punkt (dziękuję za bardzo jasne wyjaśnienie!) Czy nie można tego rozwiązać za pomocą gałęzi akumulacji, która ma ten sam punkt rozgałęzienia co gałęzie cech? (na podstawie Vance98 ) Czy problem naprawdę występuje tylko wtedy, gdy dwie gałęzie cech mają różne punkty rozgałęzienia?
Torben Gundtofte-Bruun

@ TorbenGundtofte-Bruun: Najnowszy wspólny przodek nie musi być punktem rozgałęzienia. Możesz go znaleźć sam i powiedzieć subversion, aby zastosował zmiany między konkretnymi wersjami kołków. Ale problem polega na tym, że jest to dużo pracy i musisz zdać sobie sprawę, że musisz to zrobić, ponieważ subwersja niekoniecznie rzuca ręce, mówiąc, że nie można się połączyć. Zamiast tego może znaleźć wspólnego przodka, który nie jest najnowszy i generować wiele konfliktów.
Jan Hudec

1

Z mojego doświadczenia wynika, że ​​scalanie w SVN zostało „naprawione” w wersji 1.6. Pracuję zarówno w Mercurial, jak i SVN, a od wersji SVN 1.6 łączenie wydaje się być na takiej samej ilości pracy na obu platformach. Jedynym wyjątkiem może być to, że musisz pamiętać o podaniu --reintegrateopcji podczas łączenia z gałęzi z powrotem do linii głównej za pomocą SVN.

To tylko moje doświadczenie operacyjne. Nic nie wiem o wewnętrznych elementach SVN.


2
Na szczęście 1.8 potrafi wreszcie wykryć samą „reintegrację”. Ale to dotyczy tylko najnowszego wspólnego przodka na poziomie lokalnym lub zdalnym. Nadal nie może go znaleźć w trzeciej gałęzi.
Jan Hudec
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.