Shared

VPS

Dedicado

WP Professional

WP Professional Plus

A ferramenta “diff” calcula as diferenças entre dois ficheiros de texto. Essa diferença chama-se “diff”. Pode aplicar um patch a outro ficheiro utilizando a ferramenta “patch”.

diff e o patch destina-se a ser utilizado em ficheiros de texto. Os ficheiros que são binários ou manipulados por aplicações propositadamente construídas, como ficheiros .doc, .pdf, .xlsx, ou .wav, não funcionam bem com diff e patch.

Porquê usar diff e patch?

Razão 1: diff pode ser útil por si só para ver o que mudou entre ficheiros, mesmo que nunca se use o patch.

Razão 2: por vezes é possível obter correcções de terceiros e aplicá-las aos seus ficheiros. Isto pode ser benéfico em casos em que os ficheiros a serem corrigidos são grandes, mas o número de alterações é relativamente pequeno: transferir um ficheiro de correcção é mais eficiente do que transferir o ficheiro inteiro.

Razão 3: Pode aplicar correcções a ficheiros que não correspondem perfeitamente ao ficheiro original utilizado na diff.
Por exemplo, se utilizar um CMS com um ficheiro de configuração, e fizer modificações locais a esse ficheiro de configuração, pretende preservar essas alterações locais ao actualizar o seu CMS. A cópia da nova configuração do fornecedor sobre a sua versão irá perder as suas alterações. No entanto, em muitos casos, pode ainda usar com segurança o patch para aplicar as alterações do fornecedor da versão mais recente sem perder as suas próprias alterações.

O que é diff?

diff é uma forma de comparar ficheiros para diferenças (daí o nome “diff”) a partir da linha de comando. Por exemplo, se tiver um ficheiro original, então faça algumas alterações e guarde-o com outro nome, poderá comparar os dois usando diff.

usando diff image

diff Syntax

diff é usado na linha de comando. A sintaxe básica da diff é semelhante a esta:

diff 

Este comando estabelece a estrutura básica para comparar um ficheiro com outro. Há também opções para adicionar mais funcionalidade a um comando.

Sintaxe básica (sem Opções)

Substituir e com os nomes reais dos ficheiros. Certifique-se de incluir as extensões dos ficheiros com os nomes dos ficheiros. Um comando diff básico sem opções pode parecer algo parecido com isto:

diff file1.html file2.html

Neste exemplo, o comando compararia ficheiro1.html e ficheiro2.html e produziria as diferenças na linha de comando.

diff Syntax (com Opções)

diff options add more functionality to commands. No entanto, as opções alterarão um pouco a sintaxe dos comandos.

diff options vão entre diff e o primeiro nome de ficheiro:

diff -y file1.html file2.html

P>Vocês também podem combinar múltiplas opções num único comando. Faça-o adicionando todas as letras das opções pertinentes após o traço (-). Acabará por se assemelhar a isto:

diff -uy file1.html file2.html

P>Vocês também podem ver uma variação que dá a cada opção o seu próprio traço (-). Ambos os métodos de adicionar múltiplas opções são válidos

diff -u -y file1.html file2.html

Ver abaixo para uma lista de opções normalmente utilizadas:

Opção Descrição
-N Ignora ficheiros ausentes
-r Executa dif recursivamente através de um directório. Utilizado para comparar vários ficheiros ao mesmo tempo. Nota: isto não é o mesmo que -R, que é uma opção de correcção
-u Displays output num formato mais fácil de ler. Isto pode remover alguma informação, tal como linhas de contexto.
-y Força a saída a exibir as diferenças lado a lado.

Para mais opções, ver esta lista de opções dif pelo GNU.

diff Output

Quando um comando diff é executado, o output básico parecerá semelhante a este:

Usando a opção -y mudará a forma como a saída é exibida

11c11< this is text from the original file---> this is the same line from the second, changed file

Apenas as alterações serão exibidas na saída, para que não seja necessário eliminar os dois ficheiros. Em vez disso, a diff compara e retira as alterações para que as possa visualizar.

Dica

Os caracteres “>” e “<” em diff apontam na direcção do ficheiro em que o conteúdo é encontrado. Assim, para o comando “diff file1 file2”, um “<” refere-se a linhas do ficheiro1 e “>” refere-se a linhas do ficheiro2.

imagem da ponta do conteúdo

Como ler a saída de dif

Aqui está um breve guia sobre a leitura da saída de dif.

A primeira linha de saída

A primeira linha na saída indica os números de linha que contêm diferenças e o tipo de alterações que foram feitas.

diff imagem de saída

Se dois números estiverem separados por uma vírgula, isto significa que há alterações desde o primeiro número de linha até ao segundo. No exemplo da imagem acima, 11,12 indicaria que há alterações nas linhas 11 – 12.

O “c” que separa os números de linha no exemplo acima indica o tipo de alteração que ocorreu. Existem letras diferentes que indicam diferentes tipos de alterações:

Letter Meaning
c Conteúdo foi substituído
a Conteúdo foi adicionado ou anexado
d Conteúdo foi eliminado

Ao utilizar o patch, que será explicado na secção O que é o remendo? estas letras serão importantes.

O resto da saída

O resto da saída diz respeito às diferenças reais entre ficheiros.

As linhas alteradas serão listadas ao lado de < ou > parênteses de ângulo. Três traços (—) indicam que o fim da linha do primeiro ficheiro muda e o início do ficheiro seguinte. Ficará com este aspecto:

< text from file one---> text from file two

Agora que tem uma compreensão básica de diff, é altura de passar para patch.

O que é patch?

p>patch é um comando que tira a saída do diff e a coloca num ficheiro. Depois, pode pegar na saída do ficheiro e escrever outro ficheiro com as alterações. Por exemplo, um uso comum é utilizar o patch para transferir as alterações do ficheiro alterado para o ficheiro original, tornando-as assim idênticas. Embora isto também possa ser conseguido através da cópia/colagem do ficheiro actualizado no ficheiro original, o patch é muito mais rápido e eficiente.

Como utilizar diff e patch Together

diff funciona catalogando as alterações entre os dois ficheiros ou pastas. O patch pode pegar nessas alterações, colocá-las num ficheiro, e actualizar versões mais antigas com ele.

patch Options

O comando patch também tem o seu próprio conjunto de opções para adicionar funcionalidade. Encontre abaixo uma lista de opções normalmente utilizadas:

-b Cria uma cópia de segurança do ficheiro original
-i Força o comando a ler o patch a partir do ficheiro .patch em vez de a partir da entrada padrão
-p Encarrega o comando de retirar # o número de cortes do caminho do ficheiro para o nome do ficheiro. Verá na maioria dos nossos exemplos, usamos -p0 para que nenhum corte seja removido
-R Revira a correcção anterior
-s Executa o comando silenciosamente. Só mostrará o processo se houver erros

Para mais opções, ver esta lista de opções de patch por GNU.

Criar um patch

Criar um ficheiro de patch é o primeiro passo para utilizar o patch e a diff em conjunto. O ficheiro de correcção pode ser usado para adicionar alterações a outros ficheiros, e por isso é necessário para comandos como Overwrite the original file with changes.

Para criar um ficheiro de correcção, introduza o comando abaixo na linha de comando:

diff -u file1.html file2.html > patchfile.patch

No exemplo acima, a saída da diff será guardada num ficheiro chamado patchfile.patch. Ao executar o comando, certifique-se de alterar file1.html e file2.html para nomes de ficheiro reais.

Overwrite files with changes

Após o ficheiro patch ser criado, pode utilizá-lo para copiar as alterações para outro ficheiro. Por exemplo, pode querer sobrescrever o ficheiro1 com as alterações do ficheiro actualizado2. Para o fazer, pode usar uma sintaxe como esta:

patch file1.html patchfile.patch

Substituir ficheiro1.html pelo seu ficheiro original. Isto substituiria o conteúdo antigo do ficheiro1.html pelo conteúdo alterado do ficheiro2.html.

Como reverter um patch

Se quiser reverter o ficheiro para a sua versão anterior antes de aplicar o patch, pode fazê-lo executando este comando:

patch -p0 -R -i patchfile.patch

A linha de comando irá então pedir-lhe para introduzir o nome do ficheiro que pretende reverter. Uma vez introduzido o nome do ficheiro, o processo de inversão será iniciado. Se bem sucedido, o ficheiro será revertido para o seu estado anterior.

patch Directories

Usar diff e patch em directórios inteiros é um processo semelhante à sua utilização em ficheiros individuais.

O primeiro passo é criar um ficheiro de correcção usando o comando:

diff -ruN folder1/ folder2/ > patchfile.patch

Então, emitiria o comando para corrigir a pasta original, que neste caso é a pasta1:

patch -s -p0 < patchfile.patch

Se for bem sucedido, o seu directório original deverá agora ser actualizado para corresponder à segunda pasta actualizada.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *