
Segundo a wikipedia: Um patch (termo da língua inglesa que significa, literalmente, “remendo”) é um programa de computador criado para atualizar ou corrigir um software de forma a melhorar sua usabilidade ou performance. Quando patches corrigem bugs ou vulnerabilidades de segurança, se dá o nome de bugfix.
Esta técnica pode ser utilizada como uma das formas de distribuir uma liberação de software. É muito utilizada em jogos para computadores de forma a atualizar o conteúdo disponível.
O comando
patchUNIX: Uma patch (Unix) é um programa de computador do sistema operacional UNIX que aplica as diferenças textuais entre dois programas e, mais freqüentemente, a arquivos de computador contendo essas diferenças, ou arquivos diff.
De acordo com o manual: patch pega um arquivo de “patch”:
patchfilecontendo uma diferença lista produzida pelo programa diff e aplica aqueles diferenças em um ou mais arquivos originais, produzindo versões.
Normalmente, as versões corrigidas são colocadas no lugar do original.
patch [arquivo que você deseja aplicar o patch] [o patch]Suponhamos que você tenha o seguinte arquivo em C++:
vim hello.cpp
#include <iostream>
int main( int argc , char **argv ){
std::cout << "Olá, Mundo!" << '\n';
return 0;
}E então, você cria um novo baseado nele e altera algumas coisas:
cp hello.cpp new_hello.cpp
vim new_hello.cpp
#include <iostream>
int main( int argc , char **argv ){
std::cout << "Olá, Mundo!" << '\n';
std::cout << "Êta mundo bom de acabar ..." << '\n';
return 0;
}Quando você rodar o comando diff com a parâmetro -u você e gera o um arquivo de patch: file.patch:
diff -u hello.cpp new_hello.cpp > file.patchE então o conteúdo de file.patch terá o seguinte código:
--- hello.cpp 2021-06-29 00:01:27.329937847 -0300
+++ new_hello.cpp 2021-06-29 00:02:08.281947880 -0300
@@ -2,6 +2,7 @@
int main( int argc , char **argv ){
std::cout << "Olá, Mundo!" << '\n';
+ std::cout << "Êta mundo bom de acabar ..." << '\n';
return 0;
}Apesar desse exemplo ser básico e poder alterar a linha manulamente, na maioria dos casos em projetos maiores, seria muito trabalho.
Logo, para aplicar o patch, como vimos na Sintaxe dele acima, basta rodar o comando patch:
patch hello.cpp file.patchE se você for ver o conteúdo de hello.cpp agora perceberá que está idêntico ao do new_hello.cpp.
Fácil, né? Lógico que ainda há muitaaaas opções e vale à pela dar uma olhada no manual e no help:
patch --help
man patchSó aplicando um patch.