2012-03-21 18 views
8

Właśnie odkryłem, że choć sekcja w git help svnrebase mówiJak wykonać polecenie git svn fetch + rebase w jednej operacji?

Ten pobiera wersje z SVN rodzica obecnego szefa i rebases obecny (niezatwierdzone do SVN) działają przeciwko niej.

(podkreślenie moje) to nie znaczy, że rebaseobejmuje się git svn fetch. Czy jest tam jakiś sposób uruchomienia pojedynczej komendy pojedynczej git svn, aby wykonać zarówno?

Powód chcę, aby to zrobić jest to, że tylko zapisu na jeden oddział, więc chcę rebase że jednym a ja często czytać inne branże, więc chcę fetch tych.

+0

Nie mam doświadczenia z 'git svn' ale zwykłe' git pull' może być skonfigurowane do używania 'rebase' zamiast' merge' iw ten sposób robi oba kroki, które chcesz. Postawiłbym odpowiedź, gdybym wiedział, jak to zrobić z 'git svn' - po prostu szukaj odpowiednika' git config branch.autosetuprebase always'. –

+0

To znaczy. Spróbuj. Najpierw pobiera, a następnie przegrywa. –

+2

Nie, nie ma. 'git svn rebase' robi * nie * pobiera nowe gałęzie z pilota, podczas gdy' git svn fetch' robi. Po prostu to wypróbowałem. – l0b0

Odpowiedz

8

Jestem też trochę zaskoczony, że w rzeczywistości jest to sposób, w jaki zachowuje. Jednak, aby odpowiedzieć na to pytanie, wystarczy zdefiniować alias:

git config --global alias.refetch '!git svn fetch && git svn rebase'

Następnie git refetch powinien robić, co chcesz.

+0

Wystarczająco fair; wygląda na to, że nie ma na to standardowego sposobu. – l0b0

+0

dlaczego, na Ziemi, chcesz pobrać wszystkie repliki svn tylko po to, aby odrodzić jedną? –

+0

@ l0b0: Nie ma standardowego sposobu, aby to zrobić, ponieważ nie jest to standardowy sposób używania 'git svn'. 'git svn rebase' ma na celu przeniesienie twojej obecnej gałęzi do końcówki Subversion, więc ignoruje wszelkie inne gałęzie Subversion w imię szybkiego otrzymania użytecznej kopii roboczej. 'git svn fetch' aktualizuje wszystko z repozytorium Subversion, więc często jest to znacznie wolniejsze działanie. Jestem naprawdę zdezorientowany tym, co faktycznie próbujesz osiągnąć, co oznacza, że ​​musisz umieć to zrobić. –

-3
git pull --rebase 

Można również skonfigurować go tak, aby był domyślnie ustawiony. Następnie można:

git pull 

UPDATE:

oops. Potrzebujesz więcej kawy ...

Wszystko, co mogę myśleć jest skrypt, co trzeba ..

+0

wyciągnąć z repozytorium svn? –

+0

@AdamDymitruk: To nie jest * o wanilii 'git' - chodzi o' git svn'. – l0b0

19

Myślę, że wprowadzasz w błąd git rebase i git svn rebase. Pierwsze ruchy są zatwierdzane do bieżącego HEAD na określoną przez ciebie wersję, podczas gdy ta druga przenosi twój bieżący HEAD na czubek gałęzi Subversion, w której jesteś.

git svn rebasema obejmują git svn fetch --parent, czyli będzie to nic nowego Subversion zobowiązuje na oddział Aktualnie jesteś, ale nie każdy Subversion zobowiązuje się od innych gałęzi (przeciwieństwie do zwykłego git svn fetch, który pobiera od wszystkich gałęziach).

Podejrzewam, że nie chcesz wykonywać pełnego git svn fetch, gdy robisz git svn rebase, ponieważ będzie to oznaczać, że będzie znacznie dłużej, zanim uzyskasz użyteczną kopię roboczą. Jeśli chcesz mieć regularne git svn fetch es, radzę skonfigurować zadanie cron, które zrobi pobranie w tle dla ciebie.

+0

Masz rację, –

+0

Całkiem stary post, ale uważam, że jest nadal aktualny. I ABSOLUTNIE chcę uzyskać wszystkie aktualizacje oddziału przed wykonaniem repozytorium git svn. Czemu? Ponieważ podczas scalania miałem wiele problemów, jeśli tego nie robię. Zbyt łatwo jest zapomnieć o pobraniu każdej gałęzi, którą chcesz scalić przed scaleniem i zrobić to: 'git svn rebase && git checkout master && git merge feature' zanim zbyt późno zorientujesz się, że nie zaktualizowałeś właściwych gałęzi z SVN. Jeśli używasz git svn do obsługi lepszych rozgałęzień, zawsze warto ZAWSZE "git svn fetch" zrobić wszystko przed zmianą. Jeśli nie "git svn dcommit" tupie na wszystko. –

+0

Jeśli w repozytorium SVN jest zbyt wiele gałęzi i trwa to na zawsze, usuń '*' z linii konfiguracyjnej 'branches:' i zajmij się tylko gałęziami, nad którymi pracujesz. Jeśli robisz kombinację 'master -> dev -> feature', łatwo jest obsłużyć tylko te gałęzie, używając symboli wieloznacznych i pliku konfiguracyjnego git. W ten sposób, gdy 'git svn fetch' nie otrzymasz niepotrzebnych gałęzi. 'git svn rebase' całkowicie zepsuł moje repozytorium git i svn w przeszłości, ponieważ nie svn pobiera gałęzi przed ręką. Nie dobrze mi to tłumaczy. Mógłbym być w mniejszości tutaj. –

Powiązane problemy