Como desfazer após a aplicação do patch? arquivos .rej / .orig

1

O caso está seguindo. Eu tenho dois arquivos: file1.c , file2.c

ls 
file1.c file2.c patch.diff
patch < patch.diff
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej 
(the same with file2.c)
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff
patch -R < patch.diff # I thought it will revert changes back
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej
(again, the same with file2.c)    
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff

Agora saí com arquivos quebrados e não tenho ideia de como recuperá-los. Parece que os arquivos * .orig foram substituídos na segunda passagem com alterações já quebradas. Alguma idéia?

    
por Timur Fayzrakhmanov 07.06.2018 / 11:49

1 resposta

1

É sempre uma boa ideia fazer cópias de backup dos arquivos originais.

Isso pode ser feito automaticamente se você chamar patch com a opção -b .

Histórico: caso não exista nenhum arquivo .rej , você pode ligar:

patch -R

para reverter o patch, mas isso não funciona em caso de problema.

Observe que no caso em que file2.c.orig já exista quando patch for iniciado, esse arquivo será removido e substituído por uma cópia de backup do estado atual.

Se você tiver esses arquivos .orig , poderá renomeá-los facilmente para o nome do arquivo original para desfazer o patch.

Observe que pode ser uma boa ideia reverter todos os patches para todos os arquivos em um projeto, no caso de um único patch falhar. Como isso requer .orig arquivos para todos os arquivos corrigidos, é recomendável usar

patch -b

Se você tiver esses arquivos .orig , poderá ligar:

for i in *.orig; do
    base='basename $i .orig'
    mv $i $base
done
    
por 07.06.2018 / 12:03

Tags