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.
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.
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.
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.
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.