Existem muitos programas por aí que podem criar um patch diff, mas estou tendo um bom tempo tentando aplicar um. Estou tentando distribuir um patch e recebi uma pergunta de um usuário sobre como aplicá-lo. Então, tentei descobrir por conta própria e descobri que não tenho idéia, e a maioria das ferramentas que posso encontrar são de linha de comando. (Eu posso lidar com uma linha de comando, mas muitas pessoas se perderiam sem uma interface gráfica agradável e amigável. Portanto, essas não são boas para essa finalidade.)
Eu tentei usar o TortoiseSVN. Eu tenho o patch que gostaria de aplicar. Clico com o botão direito do mouse no patch e há uma opção no submenu TortoiseSVN que diz "Apply patch". Tudo o que faz é abrir uma janela vazia.
Então eu tentei abrir o Open. Possui duas opções: mesclar e aplicar diff unificado. (O patch está no formato diff unificado, por sorte.) Mas a opção de aplicar simplesmente não funciona: ele solicita o patch e uma pasta. De alguma forma, ele esqueceu de solicitar o arquivo ao qual aplicar o patch! Portanto, o TortoiseSVN simplesmente não funciona. Existe um utilitário baseado na GUI do Windows que pega um patch e um arquivo e os aplica adequadamente?
EDIT: Olhando para as respostas até agora, parece que o Tortoise só fará o que é certo se for um arquivo que já está com versão. Esse não é o caso aqui. Eu preciso ser capaz de aplicar um patch a um arquivo que não saiu de um repositório SVN. Eu apenas tentei usar o Tortoise, porque sei que o SVN usa diffs e precisa saber como criá-los e aplicá-los.
Respostas:
Aplicar patch
Com o TortoiseMerge:
Screeny alternativo se você abrir no TortoiseMerge. Na tela abaixo, o diretório se refere ao diretório "mesclado" mencionado na etapa 2 acima:
Captura de tela da GUI do WinMerge:
fonte
Eu fiz pura ferramenta Python apenas para isso. Possui comportamento previsível entre plataformas. Embora não crie novos arquivos (no momento em que escrevo isso) e não tenha uma GUI, ele pode ser usado como uma biblioteca para criar uma ferramenta gráfica.
ATUALIZAÇÃO : Deve ser mais conveniente usá-lo se você tiver o Python instalado.
fonte
O TortoiseMerge é um utilitário separado que acompanha o TortoiseSVN.
Também pode ser baixado separadamente no arquivo TortoiseDiff.zip . Isso permitirá que você aplique diferenças unificadas a arquivos sem versão.
fonte
Eu sei que você disse que preferiria uma GUI, mas as ferramentas da linha de comando farão o trabalho bem. Veja o GnuWin para uma porta de ferramentas unix para o Windows. Você precisaria do comando patch, obviamente ;-)
Você pode encontrar um problema com o término da linha. A porta GnuWin assumirá que o patchfile possui terminação de linha no estilo DOS (CR / LF). Tente abrir o patchfile em um editor razoavelmente inteligente e ele será convertido para você.
fonte
No TortoiseSVN, a aplicação de patches funciona. Você precisa aplicar o patch no mesmo diretório em que foi criado . É sempre importante manter isso em mente. Então, aqui está como você faz isso no TortoiseSVN:
Clique com o botão direito do mouse na pasta à qual você deseja aplicar o patch. Ele apresentará uma caixa de diálogo solicitando a localização do arquivo de correção. Selecione o arquivo e isso abrirá uma pequena janela da lista de arquivos que lista os arquivos alterados, e clicar em cada item abrirá uma janela de diferenças que mostra o que o patch está prestes a fazer com esse arquivo.
Boa sorte.
fonte
O utilitário patch.exe da instalação do Git funciona no Windows 10.
Instale o Git for Windows e use o
"C:\Program Files\Git\usr\bin\patch.exe"
comando para aplicar um patch.Se alguma mensagem de erro como a
Hunk #1 FAILED at 1 (different line endings).
tiver sido exibida na saída durante a aplicação de um patch, tente adicionar a-l
(que é um atalho para--ignore-whitespace
) ou as--binary
opções à linha de comando.fonte
Você pode usar esta porta nativa do Win32 do utilitário de patch.
Ele vem com uma seleção maior de outros utilitários e, ao contrário do Cygwin e similares, ele não precisa de DLLs ou similares. Basta escolher o seu pequeno executável de escolha e armazená-lo onde quiser.
Uso simples:
Obtenha mais ajuda:
fonte
patch.exe
.patch
. O Windows considera todos os exes com a palavrapatch
suspeitos.Você pode instalar o Cygwin e , em seguida, usar a ferramenta de patch da linha de comando para aplicar o patch. Veja também esta página de manual do Unix , que se aplica ao patch .
fonte
Parece que o TortoiseSVN (TortoiseMerge) requer a linha
Index: foobar.py
no arquivo diff / patch. Era o que eu precisava fazer para que um arquivo de patch não TortoiseSVN funcionasse com o botão direito do mouse em Aplicar patch do TortoiseSVN comando .Antes:
Depois de:
Ou se você conhece a revisão específica em que seu colaborador estava trabalhando:
fonte
Eu uso o MSYS2 em http://www.msys2.org/
Ele fornece muitas utilidades como
patch
,which
,git
,tree
, e muitos mais.Após instalar o MSYS2, basta executar o gerenciador de pacotes para instalar
patch
:fonte
O patch informa a que arquivo se aplica. O cabeçalho deve ser algo como (veja no Bloco de notas ou no seu editor de texto favorito):
No caso de um patch do Subversion, você também teria números de revisão (já que os nomes dos arquivos são os mesmos).
O patch GNU permitirá que você substitua esses nomes, mas não conheço nenhuma ferramenta GUI para fazer o mesmo. Eu verificaria com os vários programas diff - porém, não parece que o WinMerge suporta a aplicação de patches.
fonte
O Eclipse deve ser capaz de fazê-lo, vá para a perspectiva TeamSynchronize e depois em Projeto-> Aplicar patch
fonte
Para projetos Java, usei o NetBeans para aplicar arquivos de correção. Se o código Java que você está corrigindo ainda não é um projeto do NetBeans, crie um projeto para ele. Para criar um novo projeto:
Agora que você tem um projeto, aplique o patch:
É isso aí. Seu patch deve ser aplicado e você verá uma janela de diferenças mostrando as alterações.
fonte
Já estou usando o BeyondCompare (comercial) para diferenças e mesclagens, e essa ferramenta também tem a capacidade de criar, visualizar e aplicar patches.
fonte
Se você estiver usando o Mercurial , isso é feito através de "importação". Portanto, na linha de comando, no
hg import
comando ou (você pode encontrar o--no-commit
opção útil) ou "Repositório" => "Importar ..." no Hg Workbench.Observe que eles confirmarão as alterações por padrão; você pode evitar essa
hg import --no-commit
opção usando a linha de comando ou o Hg Workbench, talvez seja útil emitirhg rollback
após a mesclagem.fonte
Ao aplicar patches usando o TortoiseSVN, normalmente salvo o caminho na raiz do repositório com check-out. Você deve poder clicar com o botão direito do mouse no patch, acessar o menu TortoiseSVN e clicar em ApplyPatch. O ApplyPatch deve descobrir automaticamente em qual nível na hierarquia de diretórios o patch foi criado.
No entanto, tive problemas no passado com a aplicação de patches que contêm novos arquivos ou que envolvem renomeação de arquivos. Qualquer que seja o algoritmo que o Tortoise use para isso não parece lidar muito bem com esses cenários. O Unicode pode fornecer problemas semelhantes.
fonte
Você tem dois monitores? Eu estava tendo o mesmo problema com o TortoiseMerge e percebi que quando desabilitava um dos monitores, a pequena janela com a lista de arquivos aparecia. Espero que isso ajude você.
fonte
Se você estiver recebendo a mensagem de erro "Não é uma cópia de trabalho", tente selecionar um diretório na caixa de diálogo TortoiseMerge, que é um diretório de trabalho do SVN.
fonte
Uma porta BusyBox para Windows possui um comando diff e patch, mas eles oferecem suporte apenas ao formato unificado.
fonte
Apenas use:
lembre-se de executar este comando apenas no local da pasta em que você criou o patch.
fonte