Como aplicar SVN diff para Git?
-
20-08-2019 - |
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.
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.