2010-11-15 15 views
7

Używam mostka git-svn i przetasowałem dużą liczbę plików w moim repozytorium, więc jest trochę lepiej zorganizowany.Czy można bezpiecznie przerwać wywołanie dcommit, które wydaje się zawieszone?

Uruchomiłem git svn dcommit, aby wprowadzić zmiany na serwerze SVN i proces wydaje się zawieszony. Nie dostaję żadnego użycia procesora i nie używam sieci dla połączenia dcommit przez ostatnie 45 minut. Wyjście utknęło pod adresem:

> git svn dcommit 
...snip... 
    R  zlib/vs2005/zconf.h => tools/zlib/vs2005/zconf.h 
    R  zlib/vs2005/zlib.h => tools/zlib/vs2005/zlib.h 
    R  zlib/vs2005/zlib_ds.lib => tools/zlib/vs2005/zlib_ds.lib 
    R  zlib/vs2005/zlib_ds.pdb => tools/zlib/vs2005/zlib_ds.pdb 
    R  zlib/vs2005/zlib_s.lib => tools/zlib/vs2005/zlib_s.lib 
    R  zlib/vs2005/zlib_s.pdb => tools/zlib/vs2005/zlib_s.pdb 

I to tam przez około 45 minut.

Edytuj: ostatecznie zakończyło się komunikat o przekroczeniu limitu czasu połączenia HTTPS. To zajęło około półtorej godziny.

Nie mogę znaleźć żadnych ostatecznych informacji o tym, co się stanie, jeśli przerwę to wywołanie dcommit i co powinienem zrobić, zanim spróbuję ponownie przesłać zmiany z mojego lokalnego repozytorium z powrotem na serwer SVN .

Mogę odpowiedzieć na jedną część mojego pytania: Co powinienem zrobić przed ponowną próbą?

Po upłynięciu limitu czasu połączenia i przywróceniu monitu musiałem wykonać numer git svn fetch, zanim będę mógł ponownie uruchomić git svn dcommit. Wszystkie moje operacje zmiany nazw zostały znalezione w repozytorium SVN, ale katalogi, które pozostały puste po przetasowaniu, nie zostały usunięte. Musiałem użyć mojego klienta SVN, aby je usunąć. Nie jestem pewien, czy to coś git-svn, czy z powodu limitu czasu HTTPS podczas tego wywołania dcommit.

Nadal nie znam odpowiedzi na pytanie: Czy przerwanie połączenia dcommit jest bezpieczne?

+1

Jeśli chcesz, aby git-svn usuwał puste katalogi, powinieneś użyć opcji konfiguracyjnej '--rmdir' lub opcji' svn.rmdir'. – ninjalj

+0

Co do głównego pytania, prawdopodobnie powinieneś zapytać na liście mailingowej git, być może autora CC'ing git-svn. – ninjalj

+0

Dzięki @ninjalj - spróbuję na liście mailingowej. –

Odpowiedz

5

Tak, jest bezpiecznie.

dcommit zasadzie robi to dla każdego popełnić jesteś pchanie do SVN:

  1. obliczamy różnicę między popełnienia i jego rodzica. (Zasadniczo, tworzenie poprawki do zatwierdzenia.)
  2. Wyślij tę różnicę przez protokół SVN jako zestaw zmian, który ma zostać zatwierdzony. Gdy to się stanie, zatwierdzenie będzie teraz działać na serwerze SVN.
  3. Pobierz nowe zatwierdzenie i wszelkie inne nowe zatwierdzenia, które zostały utworzone w międzyczasie przez innych użytkowników, i zapisz je lokalnie, jako prawidłowe zatwierdzenie Git. Odniesienie gałęzi git-svn zostanie zaktualizowane, aby wskazywało najnowszą.
  4. Rozwiń wszystkie zatwierdzenia po tym, które zostały właśnie przetworzone na odnowienie ref. Git-svn. (Ponieważ przetwarzanie zatwierdzenia powinno teraz działać na serwerze, spowoduje to odrzucenie lokalnego zatwierdzenia, które zostało właśnie przetworzone, jak w każdym innym repozytorium.)

Jeśli przerwiesz w kroku 2 (co jest to brzmi jak), wtedy bieżące zatwierdzenie zostanie przerwane na serwerze svn. Powinieneś móc ponownie zatroszczyć się bez obaw.

Ale jeśli jesteś paranoikiem (i powinieneś być w trakcie współdziałania VC takich jak ten), najpierw możesz uruchomić git svn rebase. Spowoduje to usunięcie wszystkich nowych commitów na SVN (włączając w to zatwierdzenie, które próbowałeś pchnąć, jeśli faktycznie odniosło sukces po stronie serwera) i rebase twój lokalny oddział na nim.

+0

Dzięki @cdhowie. Po tym, jak limit czasu w końcu zwrócił moją podpowiedź, spróbowałem rebase. Szkoda, że ​​nie złapałem błędu, który dostałem. Nie chciałem aktualizować lokalnego repozytorium git z serwera SVN. Jeśli uda mi się go odtworzyć, opublikuję błąd. –

+0

Czy był to prosty błąd, czy tylko konflikt związany z łatką? – cdhowie

+0

To był konflikt, ale nie mogłem wymyślić, jak go rozwiązać. Skończyło się na sprawdzeniu commit przy użyciu 'svn', a następnie odtworzeniu od podstaw lokalnego repozytorium git za pomocą innego wywołania' git svn clone'. –

Powiązane problemy