Top Qs
Linha do tempo
Chat
Contexto
Patch (Unix)
Da Wikipédia, a enciclopédia livre
Remove ads
patch é um comando do shell que atualiza arquivos de texto de acordo com as instruções contidas em um arquivo separado, chamado de arquivo de patch. O arquivo de patch é um arquivo de texto que lista as diferenças entre o arquivo de entrada e o conteúdo desejado. O comando foi projetado para suportar arquivos de patch criados via diff. Um usuário cria um arquivo de patch executando o diff para duas versões de um arquivo (original e destino), o que produz uma lista de diferenças que o patch pode usar posteriormente para gerar o arquivo destino a partir do arquivo original mais o arquivo de patch. O termo patch (aplicar patch) também é um verbo – significando aplicar um patch.
Desenvolvido por um programador para outros programadores, o patch era frequentemente usado para atualizar código fonte para uma versão mais nova. Por causa disso, muitas pessoas associaram patches ao código fonte, embora os patches possam, de fato, ser aplicados a qualquer texto. Os arquivos patchados não acumulam texto desnecessário, que é o que algumas pessoas percebem com base no significado em inglês da palavra; o patch é tão capaz de remover texto quanto de adicioná-lo.
Os patches descritos aqui não devem ser confundidos com patches binários, que, embora possam ser conceitualmente semelhantes, são distribuídos para atualizar arquivos binários que compõem o programa para um novo lançamento.
O programa original patch foi escrito por Larry Wall (que mais tarde criou a linguagem de programação Perl) e postado no mod.sources[1] (que mais tarde se tornou comp.sources.unix) em maio de 1985. patch foi adicionado ao XPG4, que mais tarde se tornou o POSIX.[2] O código de Wall permanece sendo a base dos programas "patch" fornecidos no OpenBSD,[3] FreeBSD,[4] e schilytools.[5] Diz-se que a Open Software Foundation, que se fundiu com The Open Group, manteve uma versão derivada. O projeto GNU/FSF mantém seu próprio patch, bifurcado (forked) da versão do Larry Wall. O repositório é diferente do do GNU diffutils, mas a documentação é gerenciada em conjunto.[6] Originalmente escrito para Unix, o comando também foi portado para Windows (via GnuWin32 e UnxUtils) e muitas outras plataformas. Uma implementação faz parte do MSX-DOS2 Tools da ASCII para MSX-DOS versão 2.[7]
Remove ads
Uso
Resumir
Perspectiva
Como os arquivos de patch são texto, eles podem ser usados em processos como revisão de qualidade e modificação via um editor de texto.
Além do comando diff, um arquivo de patch pode ser produzido por outros programas, como Subversion, CVS, RCS, Mercurial e Git.
Os patches têm sido o componente crucial de muitos sistemas de controle de versão, incluindo CVS.
Diffs avançados
Quando diffs mais avançados são usados, os patches podem ser aplicados mesmo a arquivos que foram modificados entretanto, desde que essas modificações não interfiram com o patch. Isso é conseguido usando "diffs de contexto" e "diffs unificados" (também conhecidos como "unidiffs"), que cercam cada alteração com contexto, que é o texto imediatamente antes e depois da parte alterada. O Patch pode então usar esse contexto para localizar a região a ser patchada, mesmo que ela tenha sido deslocada por alterações anteriores no arquivo, usando os números de linha nos diffs como um ponto de partida. Por causa dessa propriedade, os diffs de contexto e unificados são a forma preferida de patches para envio a muitos projetos de software.[8]
As características acima tornam o diff e o patch especialmente populares para a troca de modificações em software de código aberto. Pessoas de fora podem baixar o código-fonte público mais recente, fazer modificações nele e enviá-las, em forma de diff, para a equipe de desenvolvimento. Usando diffs, a equipe de desenvolvimento tem a capacidade de revisar os patches de forma eficaz antes de aplicá-los e pode aplicá-los a uma base de código mais nova do que aquela a que o desenvolvedor externo teve acesso.[8]
Remove ads
Exemplos
O comando a seguir cria um arquivo de patch, patchFile, que codifica como gerar newFile a partir de oldFile. A opção -u seleciona a saída no formato de diff unificado.
$ diff -u oldFile newFile > patchFile
O comando a seguir aplica as alterações ao arquivo identificado no patchFile.
$ patch < patchFile
Aplicar patch a um arquivo em um subdiretório requer a opção adicional -pnúmero, onde número é 1 se o diretório base da árvore de origem estiver incluído no diff, e 0 caso contrário.
Um patch pode ser desfeito ou revertido com a opção -R:
$ patch -R < patchFile
Se o arquivo usado como original for significativamente diferente do arquivo original real, o patch não pode ser aplicado de forma limpa. Por exemplo, se linhas de texto forem inseridas no início, os números de linha referenciados no patch estarão incorretos. O patch é capaz de se recuperar disso, observando as linhas próximas para relocalizar o texto a ser patchado. Ele também se recuperará quando as linhas de contexto (para diffs de contexto e unificados) forem alteradas; isso é descrito como fuzz (imprecisão).
Remove ads
Ver também
- Quilt (software)
- rsync
- xdelta
- Lista de comandos POSIX
- Utilitário de mainframe IBM IEBUPDTE um programa de patch para mainframe, criado cerca de 20 anos antes (circa ~1964).
Referências
- Wall, Larry (8 de maio de 1985). «patch version 1.3». Consultado em 14 de julho de 2024. Cópia arquivada em 4 de abril de 2023 Parâmetro desconhecido
|grupo de notícias=ignorado (ajuda) - «» (em inglês). . Seção Commands & utilities reference. Especificação Única do Unix. 7 ed. The Open Group, 2013. templatestyles stripmarker character in
|título=at position 37 (ajuda) - http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/patch/ Arquivado em 2017-06-07 no Wayback Machine Código fonte do patch do OpenBSD
- «diff». www.catb.org. Consultado em 27 de setembro de 2025. Cópia arquivada em 31 de janeiro de 2014
Remove ads
Ligações externas
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads