Suponho que você alterou o código-fonte em um dos seus arquivos de origem em um dos seus servidores e deseja portar a correção para outros sites, certo? Se você manteve uma cópia do arquivo orginial (eu sempre faço quando não conheço o projeto de cor), use seu melhor recurso: diff
:
diff -Nau old/file new/file > file.patch
Você terá um diferencial entre os arquivos de origem originais e corrigidos, com os quais você pode corrigir todos os servidores, por meio do SSH, por exemplo:
# See what's to be done, no action
cat file.patch | ssh server "patch -d <directory> --dry-run"
# Apply the patch if all seems good
cat file.patch | ssh server "patch -d <directory>"
Você pode ter que ajustar o cabeçalho do patch se a cópia inalterada estiver em um diretório diferente do arquivo corrigido. Mas basicamente, se ambos estiverem no mesmo diretório, file.php
é o arquivo fixo e file.php.orig
o original, cd
para o diretório raiz do seu site e execute o comando diff
, por exemplo:
cd /home/www/htdocs/www.mysite.tld
diff -Nau some/deep/dir/file.orig.php some/deep/dir/file.php > /tmp/file.patch
A partir do diretório raiz de outros sites:
# See what's to be done, no action
patch -d /home/www/htdocs/www.my.other.site.tld --dry-run < /tmp/file.patch
# Apply the patch if all seems good
patch -d /home/www/htdocs/www.my.other.site.tld < /tmp/file.patch
Outro argumento útil é -p
. Tanto diff
como patch
podem trabalhar em uma árvore de diretórios para aplicar correções recursivamente. Você também pode criar um patch mais complexo, concatenando-os em um arquivo. Veja patch --help
e diff --help
para mais detalhes sobre como usá-los.