git-svn: como faço para criar um novo ramo svn via git?

193

Eu tenho um repositório git que rastreia um repositório svn. Eu o clonei usando --stdlayout.

Criei uma nova filial local via git checkout -b foobar

Agora eu quero que esse ramo termine no …/branches/foobarrepositório svn.

Como eu faço isso?

(grande parte do texto investigativo. consulte o histórico de perguntas, se você se importa)

kch
fonte

Respostas:

280

Sei que esta pergunta foi respondida há um tempo atrás, mas depois de lê-la, talvez seja útil adicionar exemplos do comando git svn branch específico e relacioná-lo a um fluxo de trabalho típico.

Como kch respondeu, use git svn branch. Aqui está um exemplo completo (observe o -nteste de execução a seco):

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

Se isso der certo, o servidor responde com uma resposta como esta:

Copiando https://scm-server.com/svn/portal/trunk em r8914 para https://scm-server.com/svn/portal/branches/auth_bug ...

E sem a -nopção, o servidor provavelmente adiciona algo como:

Ponto de ramificação possível encontrado: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

Pai principal encontrado: (refs / remotes / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Seguindo pai com do_switch

Pai seguido seguido com sucesso r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(refs / remotes / auth_bug)

A melhor parte é que agora você pode criar uma filial local com base na sua filial remota da seguinte forma:

git checkout -b local/auth_bug auth_bug

O que significa "faça check-out e crie uma filial local nomeada auth_buge faça com que ela siga a filial remota (último parâmetro)auth_bug

Teste se sua filial local funciona nessa filial remota usando dcommitwith --dry-run( -n):

git svn dcommit -n

E o servidor SVN deve responder com o novo nome da filial:

Confirmando https://scm-server.com/svn/portal/branches/auth_bug ...

Jesper Rønn-Jensen
fonte
2
Sim, git co significa que Jesper criou um apelido para git.
Jason Axelson
3
atualizados e substituídos git cocom git checkoutde modo que o exemplo pode trabalhar para ninguém
Jesper Rønn-Jensen
5
Eu já votei nessa resposta, mas não sei quantas vezes continuo voltando. Obrigado!
precisa
35
Há uma parte complicada no git-svn branchcomando - você precisa estar online para criar uma nova ramificação dessa maneira. Você pode fazer o seguinte no modo offline: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. E, quando online, faça essa alteração executando 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
21412 vadishev
2
Então substitua a etapa 2 por git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Testar para garantir que o ramo agora se comprometa com o ramo svn. git svn dcommit --dry-run6. Finalmente, na verdade, cometer git svn dcommit7. Remover temperatura ramogit branch -D foobar-new
jjcf89
64

a partir do git v1.6.1, git svn branchestá disponível.

Nos documentos do git:

    ramo
        Crie uma ramificação no repositório SVN.

        -m, --message
            Permite especificar a mensagem de confirmação.

        -t, --tag
            Crie uma tag usando o tags_subdir em vez do branches_subdir
            especificado durante o git svn init.

As versões anteriores do git não fornecem uma maneira de criar um ramo svn.

kch
fonte
4

@kch Acabei de compilar (7 de dezembro de 2008) a tag v1.6.1-rc1 do git e ela contém o comando git svn branch e a documentação para ele. Portanto, a versão v1.6.1 do git deve (espero) conter este comando.

Bryan J Swift
fonte
de fato, instalei o 1.6.1 agora e o comando está disponível. atualizei minha resposta de acordo.
kch