Um patch nada mais é que um arquivo texto contendo todas as alterações , como por exemplo linhas adicionadas ou removidas. Este patch pode ser relacionado a um ou mais arquivos, em em diferentes pastas, desde que estejam no mesmo checkout do svn.
Criando um Path
Para criar um arquivo path, deve-se ir até a pasta raiz do checkout, onde encontram-se as modificações, e executar o comando abaixo:
svn diff > ~/patch_my_project.diff
Um arquivo com a extensão diff será gerado. Esta extensão é reconhecida por muitos editores de texto e também pela versão gráfica para windows do svn, o tortoise.
Aplicando um patch
Antes de se aplicar um patch, deve-se abrir em um editor de textos e ler as modificações existentes, para que se tenha certeza do que estará sendo aplicado. Após aplicar o patch, as modificações devem ser testadas e verificadas novamente antes de um commit ser realizado.
Para aplicar o patch utilizamos o comando abaixo, novamente na pasta raiz do checkout.
patch -p0 -i ~/patch_my_project.diff
A opção -p0 garante que todos os arquivos sejam achados corretamente. A opção -i informa que o parâmetro a seguir será utilizado como entrada para o patch.
Para aplicar pelo tortoise, de dentro da pasta raiz do checkout acessa-se o menu de contexto "TortoiseSVN", e em seguida o menu "Apply patch...", uma tela onde as diferenças serão mostradas é aberta, além de uma caixa de diálogo para se escolher o arquivo de diferença. Após o arquivo ser escolhido, uma lista dos arquivos contidos no patch será mostrada, onde pode-se escolher o arquivo para verificar as modificações, além de aplicar o patch.
Após este comando a aplicação pode ser compilada, testada e então o commit pode ser realizado.
Olá Luiz!
ResponderExcluirSou meio nessa área e gostei muito do seu post.
Simples e explicativo!! Executei na minha máquina e para cada arquivo alterado faz a seguinte pergunta no terminal:
patching file file_example
Reversed (or previously applied) patch detected! Assume -R? [n]
A partir desse ponto, se eu escolho "y" ou "n" ele cria uma arquivo no meu projeto, referente ao arquivo alterado e coloca extensão .orig ou .rej
Isso é normal?? Como faço para apenas aceitar minhas mudanças??
Abs!!
Carlos Heitor
Olá Carlos, é possível que a árvore que vocês está aplicando esse patch esteja diferente da original. Ou seja, ela sofreu alguma modificação.
ExcluirO que está acontecendo é que o svn está rejeitando as modificações do seu patch.
Você pode utilizar a opção "-m" --merge Merge using conflict markers instead of creating reject files. O que acontecerá aqui... Dentro do seu arquivo, serão incluidas as duas partes conflitantes, onde vc deve editar o arquivo, escolher como deve ficar a alteração no final, tirar qualquer linha parecida com >>>>mine ou <<<orig, etc... e depois indicar ao svn que o conflito daquele arquivo foi resolvido.
Você pode verificar mais opções do patch rodando patch --help