2010-05-07 9 views
6

Podejrzewam, że mam uszkodzony plik mergeinfo, ale nie jestem pewien. Czy ktoś wie, w jaki sposób podjąłem decyzję i jakie zasoby są dostępne, aby pomóc rozwiązać problemy?Jak ustalić, czy svn: mergeinfo jest uszkodzony i jak mogę to naprawić?

Oto problem. Niedawno mój zespół przeniósł się na zwinność i wykorzystuje gałęzie funkcjonalne (gałęzie fabularne naprawdę), w których różne zespoły pracują jednocześnie nad tymi samymi źródłami. Gdy historia osiąga wysoki stan gotowości, zespół łączy się z pniem. Fuzje trwają dni lub tygodnie z powodu brakujących zmian, nieoczekiwanych zmian i konfliktów. Mówimy o zespołach 5-10 osób, a wysiłek/churn wydaje się być wysoki.

Ludzie użyciu wzoru tego scalania a) długości - połączyć tułowia-to-gałęzi rozwiązania, testowanie popełnienia b) PUSH - łączenia odgałęzienia do pnia, rozwiązać, testowanie popełnienia c) Odtworzenie odgałęzienie (lub zwykle tworzą nową gałąź fabuły i porzucają ją od początku)

Pod koniec tego okresu gałąź i bagażnik powinny być wyrównane.

Problemy widzimy:

  1. zmiany nie zgłoszone podczas tułowia do oddziału scalania pojawiają się w kolejnych branch-to-bagażniku
  2. konfliktów na svn: właściwości mergeinfo podczas scalania
  3. brak pliku, ale lokalna edycja nowego pliku dodana w oddziale i przesłana do paczki
  4. przychodzące + lokalne usuwanie (plik usunięty w przypadku połączeń trunkingowych i rozgałęzionych jako konflikt)

(1) Nie powinno się dziać. Pociągnięcie od gałęzi do pnia powinno zsynchronizować wszystkie zmiany już na pniu. Zmiany w scalaniu oddziału do pnia są zmianami, które zaszły na pniu. Więc w pierwszym scaleniu powinni byli propagować do oddziału, ale nie. Wskazuje to na uszkodzenie w danych mergeinfo, które "ukryłoby" zmiany trunkingu.

(2) Nie powinno się dziać. SVN powinien zarządzać zmianami w śledzeniu korespondencji seryjnej. Wskazuje to również na uszkodzenie w danych mergeinfo:

(3) Nie powinno się dziać. Jest to przypadek nowego pliku dodanego do oddziału. Powinien pojawić się jako nowy plik dodany do pnia. Wskazuje to również na uszkodzenie w danych z korespondencji seryjnej.

(4) Uważam, że jest to błąd SVN i nie możemy tego naprawić. Nadal, gdyby był to nasz jedyny problem, byłbym szczęśliwy

Jesteśmy obecnie na serwerze svn 1.5.x z klientami używającymi svn 1.6.x i svn + ssh do łączenia. Planujemy przejść do najnowszego i największego SVN, ponieważ niektóre poprawki mogą wpływać na nasze problemy.

Nadal wygląda na to, że nasze dane mergeinfo są błędne.

  • Scala, które nie zgłaszają wszystkie zmiany
  • konfliktów w seryjnej właściwości mergeinfo

Wszelkie dobre miejsca dla mnie, aby zacząć szukać?

+0

Klient SVN 1.6.11 może być moją odpowiedzią. Użyłem strony uaktualnienia wandisco (która kołysze) i piekło scalania jest znacznie mniej piekielne –

+0

Czy używasz flagi "--reintegrate" do scalenia "push"? Fakt, że masz krok "zdecydowania" po tym, jak sugeruje mi, że nie jesteś. Nie mogę znaleźć konkretnej dokumentacji mówiącej, że scalenia dwukierunkowe bez "--reintegracji" nie mogą działać, ale samo istnienie "--reintegracji" sugeruje, że połączenie svn jest inaczej nie do zadania. – slowdog

Odpowiedz

2

Zrobiłem kilka eksperymentów z rozgałęzianiem/łączeniem SVN i odkryłem, że są sytuacje, w których scalanie po prostu nie działa - na przykład zmiany z pnia są nadpisywane. Więc jeśli nadal używasz SVN dla gałęzi funkcjonalnych, będziesz w świecie bólu.

Przeprowadziłem podobne eksperymenty z git i nie znalazłem sposobu na uzyskanie nieprawidłowego scalenia. Jeśli przeniesienie do git może być akceptowalne przez zespół/kierownictwo, zdecydowanie zalecamy jego użycie.

+0

Słyszałem o tym, ale konflikty na właściwościach mergeinfo wydają się wskazywać na głębszy problem. –

+1

Myślę, że powinienem się wyjaśnić: próbowałem złamać połączenie w SVN i udało mi się na drugą próbę, ale nie byłem w stanie stworzyć uszkodzone/niepoprawne scalenie w Git. Możesz więc spróbować śledzić podstawową przyczynę problemów mergeinfo lub możesz efektywniej wykorzystać swój czas i przejść do bardziej przyjaznego dla branży systemu kontroli wersji. – chalup

+1

Przechodzenie do git w ramce czasowej, w której działam, nie jest opcją. Tak więc, muszę rozwiązać mój problem w SVN –

2

Mieliśmy podobne problemy z powodu podobnych okoliczności iw dużej mierze rozwiązaliśmy je.

Główną z nich jest to:

Jeśli wtopienie swojej gałęzi z pnia po utworzeniu oddziału, trzeba flagi tułowia z branży commit (przy użyciu svn merge --record-only), w przeciwnym wypadku, gdy próbujesz ponownie zintegrować się z powrotem do magistrali danych, próbując połączyć commit z trunk do gałęzi z powrotem do trunk.

To oczywiście kończy się cofnięcia zmian w bagażniku wykonane po późniejszym trunk-> oddział popełnienia, ma tendencję do powodowania masowych konfliktów (zwłaszcza konflikty drzewa jeśli utworzony nowy plik lub katalog w bagażniku), itp

Tak Nasz proces jest albo nigdy synchronizacji tułowia do oddziału po to został stworzony (działa dobrze na krótkich żyli oddziałów) lub wykonać następujące czynności:

  • odgałęzienia B z pnia
  • zobowiązuje się do pnia i gałęzi
  • reintegrację tułowia do oddziału i zatwierdzanie (rozwiązywanie konfliktów, lecz w inny sposób żadnych zmian, nawet skompilować)
  • natychmiast zrobić svn scalania --record tylko od tułowia do oddziału popełnić rewizja
  • rozwiązać wszelkie inne problemy z Oddział i kontynuuj rozwój
  • po zakończeniu reintegracji od gałęzi do pnia.

znalazłem: http://www.collab.net/community/subversion/articles/merge-info.html pomocny podczas pracy, co robimy źle.

+0

patrz również http://stackoverflow.com/questions/3309602/subversion-branch-reintegration-in-v1-6 – Malcolm

Powiązane problemy