Pergunta

Eu tenho meus projetos em 2 repositórios. Um sob SVN e um em Git. Sempre que mudar algo no SVN Eu quero fazer a mesma coisa para o repositório Git.

Say I fazer uma mudança para o repositório SVN, produzindo revisão 125. Como eu iria aplicar essas mesmas alterações para meu repositório Git (assumindo meu repositório Git está atualizado com a revisão 124).

Obrigado.

Foi útil?

Solução

O que eu realmente fiz / procurando era:

cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff

Outras dicas

Tente:

svn diff | patch -d /path/to/git/repo -p0

Veja svn help diff se você deseja exportar diff de uma revisão específica.

Por que ninguém como git-svn? Eu não posso assumir que ninguém sabe sobre ele.

Há git-svn (e git-hg e git-cvs e AFAICT git-bzr). Pelo menos com git-svn você pode simplesmente fazer

git svn clone --stdlayout http://myrepo/root here

usando -s (--stdlayout) assume padrão trunk / ramos / tags / layout, mas você pode tê-lo de qualquer maneira (man git-svn).

O mapeamento é bidirecional, para que possa empurrar e puxar como com um nativo (git) remoto. Sem perguntas.

Se você estiver indo para gerar um patch no SVN e aplicá-lo com Git mais tarde, não se esqueça de uso --git opção de linha de comando :

--git

Ativa um modo de saída especial para diff svn projetado para cross-compatibilidade com o popular de controle de versão Git distribuídos sistema.

Por exemplo, execute

svn diff --git -r 125 > /tmp/patch.diff

Além de usar patch como mencionado acima, você também pode considerar a criação de um gancho post-commit para que você não tem que fazer isso toda vez que você cometer algo novo.

A seguir trabalhou para mim.

Fonte: Como para criar e aplicar um patch com Git

Primeiro, dê uma olhada no que mudanças são no patch . Você pode fazer isso facilmente com git aplicar

git apply --stat fix_empty_poster.patch

Note que este comando não aplicar o patch, mas apenas mostra os estatísticas sobre o que ele vai fazer. Depois de espreitar para o arquivo de patch com seu editor favorito, você pode ver o que as mudanças reais são.

Em seguida, você está interessado em saber como problemático o patch vai ser . Git permite testar o patch antes de você realmente aplicá-lo.

git apply --check fix_empty_poster.patch

Se você não obter quaisquer erros, o patch pode ser aplicado de forma limpa ??. Caso contrário, você pode ver o problema que você vai correr em.

Para aplicar o patch, eu vou usar am git em vez de git aplicar. A razão para isto é que am git permite-lhe assinar um patch aplicado. Isto pode ser útil para referência futura.

git am --signoff < fix_empty_poster.patch

Applying: Added specs to test empty poster URL behaviour
Applying: Added poster URL as part of cli output

Ok, manchas foram aplicadas de forma limpa e seu branch master foi atualizado. Claro, executar os testes novamente para garantir que nada foi quebrado.

Em que você git log, você verá que a cometer mensagens contêm um “Assinado-off-by” tag. Esta tag será lido por Github e outros para fornecer informações úteis sobre como o commit acabou no código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top