Filial remota do checkout usando git svn

188

Eu fiz check-out de um repositório svn usando git svn. Agora preciso fazer check-out de um dos ramos e rastreá-lo. Qual é a melhor maneira de fazer isso?

markovuksanovic
fonte

Respostas:

355

Layout padrão do Subversion

Crie um clone git que inclua seu tronco, tags e ramificações no Subversion com

git svn clone http://svn.example.com/project -T tronco -b ramos -t tags

A --stdlayoutopção é um bom atalho se o seu repositório Subversion usar a estrutura típica:

git svn clone http://svn.example.com/project --stdlayout

Faça seu repositório git ignorar tudo o que o repositório do subversion faz:

git svn show-ignore >> .git / info / exclude

Agora você deve conseguir ver todos os ramos do Subversion no lado do git:

git branch -r

Diga o nome da ramificação no Subversion é waldo. No lado git, você correria

git checkout -b controles remotos waldo-svn / waldo

O sufixo -svn é para evitar avisos do formulário

aviso: refname 'waldo' é ambíguo.

Para atualizar o ramo git waldo-svn, execute

git checkout waldo-svn
git svn rebase

A partir de uma verificação somente de tronco

Para adicionar uma ramificação do Subversion a um clone somente de tronco, modifique o repositório git .git/configpara conter

[svn-remote "svn-mybranch"]
        url = http://svn.example.com/project/branches/mybranch
        buscar =: refs / remotes / mybranch

Você precisará desenvolver o hábito de correr

git svn fetch --fetch-all

para atualizar tudo o que git svnpensa serem controles remotos separados. Neste ponto, você pode criar e rastrear ramificações como acima. Por exemplo, para criar um ramo git que corresponda a mybranch, execute

controles remotos git -b mybranch-svn remotes / mybranch

Para os ramos a partir do qual você pretende git svn dcommit, mantenha suas histórias linear!


Outras informações

Você também pode estar interessado em ler uma resposta para uma pergunta relacionada .

Greg Bacon
fonte
Isso não funciona para mim, já que fiz o check-out do tronco usando o git svn clone. Não defini ramificações para o check-out ... Acho que preciso fazer isso primeiro.
MarkVuksanovic
O fato é que eu usei git svn clone svn.example.com/project/trunk E agora eu não sei como definir outros ramos a ser rastreado sem perder meu repo atual ...
markovuksanovic
20
Eu sugeriria fornecer um prefixo para seus controles remotos svn. (adicione --prefix=svn/ao fazer git-svn initou git-svn clone) Isso eliminará a necessidade de adicionar um sufixo em suas filiais locais.
Jasonkarns
Se você tem vários ramos, não se esqueça de fazer o "mestre de check-out do git" antes de cuidar de outra
filial
Se os show-ignoreerros fora, tentegit svn show-ignore -i trunk
Antti Haapala