git-svn: jak utworzyć nową gałąź svn za pomocą git?

193

Mam repozytorium git, które śledzi repozytorium svn. Sklonowałem go za pomocą --stdlayout.

Utworzyłem nowy oddział lokalny za pośrednictwem git checkout -b foobar

Teraz chcę, aby ta gałąź znalazła się w …/branches/foobarrepozytorium svn.

Jak mam to zrobić?

(wycięłam dużo tekstu dochodzeniowego. przejrzyj historię pytań, jeśli cię to obchodzi)

kch
źródło

Odpowiedzi:

280

Wiem, że odpowiedź na to pytanie była już dawno temu, ale po przeczytaniu mogę pomóc w dodaniu przykładów konkretnej komendy gałęzi git svn i powiązać ją z typowym przepływem pracy.

Tak jak odpowiedział Kch, użyj git svn branch. Oto pełny przykład (zwróć uwagę na -ntest na sucho):

git svn branch -n  -m "Branch for authentication bug" auth_bug

Jeśli wszystko pójdzie dobrze, serwer odpowiada następującą odpowiedzią:

Kopiowanie https://scm-server.com/svn/portal/trunk na r8914 na https://scm-server.com/svn/portal/branches/auth_bug ...

I bez -nprzełącznika serwer prawdopodobnie dodaje coś takiego:

Znaleziony możliwy punkt rozgałęzienia: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

Znaleziono oddział nadrzędny: (referencje / piloty / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Podążanie za rodzicem do_switch

Skuteczne śledzenie rodzica r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(referencje / piloty / auth_bug)

Najlepsze jest to, że teraz możesz utworzyć oddział lokalny w oparciu o oddział zdalny w następujący sposób:

git checkout -b local/auth_bug auth_bug

Co oznacza: „sprawdź i utwórz lokalną gałąź o nazwie auth_bugi spraw, aby śledziła gałąź zdalną (ostatni parametr)auth_bug

Test że lokalny oddział działa w tej branży za pomocą zdalnego dcommitz --dry-run( -n):

git svn dcommit -n

A serwer SVN powinien odpowiedzieć nową nazwą oddziału:

Zobowiązanie do https://scm-server.com/svn/portal/branches/auth_bug ...

Jesper Rønn-Jensen
źródło
2
Tak, git co oznacza, że ​​Jesper skonfigurował alias git.
Jason Axelson
3
aktualizowane i zastąpione git coz git checkouttak, że przykład może pracować dla kogokolwiek
Jesper Rønn-Jensen
5
Już głosowałem na tę odpowiedź, ale nie wiem, ile razy wracam. Dziękuję Ci!
Ben Doerr
35
git-svn branchKomenda ma trudną rolę - musisz być online, aby w ten sposób utworzyć nowy oddział. W trybie offline możesz wykonać następujące czynności: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. A kiedy online, wciśnij tę zmianę, wykonując 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
vadishev
2
Więc zamień krok 2 na git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Aby przetestować, aby upewnić się, że gałąź zatwierdza teraz gałąź svn. git svn dcommit --dry-run6. W końcu faktycznie git svn dcommitgit branch -D foobar-new
dokonaj
64

od wersji git 1.6.1 git svn branchjest dostępny.

Z git docs:

    gałąź
        Utwórz gałąź w repozytorium SVN.

        -m, - wiadomość
            Pozwala określić komunikat zatwierdzenia.

        -t, --tag
            Utwórz znacznik za pomocą tagu_subdir zamiast gałęzi_subdir
            określone podczas git svn init.

Poprzednie wersje git nie umożliwiają tworzenia gałęzi svn.

kch
źródło
4

@kch Właśnie (7 grudnia 2008 r.) skompilowałem tag git v1.6.1-rc1 i zawiera on komendę gałęzi git svn oraz odpowiednią dokumentację. Tak więc wydanie git w wersji 1.6.1 powinno (mam nadzieję) zawierać to polecenie.

Bryan J Swift
źródło
faktycznie zainstalowałem teraz 1.6.1 i polecenie jest dostępne. odpowiednio zaktualizowałem moją odpowiedź.
kch