2012-04-19 14 views
16

Krótkie pytanie: jaki jest odpowiednik git-svn svn up -r r1130, aby zaktualizować tylko numerowane zatwierdzenie (z numerem svn)?Czy mogę git svn rebase do pewnej wersji svn? (Podobne do svn up-r ...)

Używam git-svn, więc mogę zarówno używać git, jak i zarządzać (wieloma) lokalnymi oddziałami repozytorium svn mojego zespołu. Posiadam wersję oprogramowania, do którego dołączam, aby pracować z określoną konfiguracją sprzętu. Od kiedy ostatnio z nim pracowałem, svn repo posunęło się naprzód obok stabilnego, dobrego punktu dla tej pracy. Chcę zaktualizować lokalny oddział do numerowanej wersji, która reprezentuje stabilne zatwierdzenie. Mogę to zrobić w svn z svn up -r r1130, ale wolę git.

Wciąż zapominam, jak to zrobiłem w przeszłości i znajdując się szukając SO i stron pomocy, próbując znaleźć najlepszy sposób. Być może jest inaczej napisany Q & A, którego mi brakuje?

Łatwo jest po prostu przejrzeć starszą wersję na czystym drzewie, ale kiedy noszę pieczęcie na szczycie drzewa, "głowa do przewijania, by powtórzyć swoją pracę nad tym ..." Zazwyczaj uwielbiam to oznacza, że ​​będę przechodził do punktu w drzewie, zanim moje zmiany zostaną dodane!

Póki co, zamierzam uzyskać git svn rebase, a następnie dokonać ponownego podziału interakcyjnego, aby cofnąć zatwierdzenia, których nie chcę, ale mam problem z przekonaniem, że jest to najlepszy lub nawet dobry sposób na zrobienie tego.

Odpowiedz

18

Preferuję rebase, ponieważ git-svn będzie musiał ponownie zmienić swoje zmiany przed dcommit. Spróbuj to zamiast:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b master_r1241   # Create a new brach matching it 
git checkout hwTesting     # Merge previously created changes 
git rebase master_r1241    # rebase on top of not quite up-to-date master branch 

Można to zrobić w jednym etapie również: (zawsze można przywrócić za pomocą reflog lub rebase --abort jeśli coś pójdzie bardzo źle).

git checkout hwTesting     # Checkout feature branch 
git rebase `git svn find-rev r1241` # rebase on top of not quite up-to-date master branch 
+0

W końcu dostałem szansę wypróbowania tego i wersja jednego kroku jest dokładnie tym, czego szukałem. Dzięki! – sage

1

Nie można tego zrobić w jednym kroku. Możesz jednak łatwo znaleźć odpowiedni identyfikator zatwierdzenia git dla danego numeru wersji svn. Wypróbuj to:

git svn find-rev rN 

gdzie N to numer wersji, który chcesz. Następnie użyj polecenia git checkout, aby sprawdzić ten konkretny punkt w historii.

+0

Jest to przydatna komenda, która jest ogólnie pomocny, ale jeśli jestem w branży, w której nowe rewizje i I 'git svn rebase' tej branży, to będzie powtórka moje nowe rewizje na górze SVN w pytaniu. Twoje polecenie sprawdzi * niezmodyfikowany * svn commit, tj. Bez moich zmian popełnionych na górze. Być może mógłbym to zrobić, a następnie utworzyć nowy oddział w tym momencie, a na koniec połączyć tę nową gałąź z moją gałęzią funkcji? – sage

+0

Dobra uwaga ... Myślę, że zazwyczaj mam tendencję do git svn rebase tylko na gałęziach śledzących ...w ten sposób moje gałęzie cech są nietknięte, dopóki nie będą gotowe do zintegrowania z linią główną. Wziąłem twoje pytanie, aby zapytać, jak zaktualizować i NASTĘPNIE przejść do konkretnej wersji nowego zatwierdzenia. –

0

Zostawię to dla odniesienia, ponieważ przyjęta odpowiedź wspomina o tym. Użyj opcji jednej bazy, ale ...


Oto, co robię na razie. Tym razem ja uaktualniania r1130 (wspomniane w pytaniu) do r1241:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b hwTesting_r1241  # Create a new brach matching it 
git merge hwTesting_r1130    # Merge previously created changes 

to przeważnie daje mi to, co chcę, ale to ikra innej gałęzi każdorazowo aktualizować. Wygląda na to, że powinien istnieć jakiś sposób, aby powiedzieć gitowi, aby scalił tylko zatwierdzenia na master do tego, które zostały zwrócone przez git svn find-rev r1241.

Powiązane problemy