É possível dizer patch
para não gerar .orig
e .rej
arquivos? Acho extremamente irritante que o patch os crie.
É possível dizer patch
para não gerar .orig
e .rej
arquivos? Acho extremamente irritante que o patch os crie.
Respostas:
Se você não estiver dando outra opção a patch
não ser -pN
, ele só criará esses arquivos quando um patch não for aplicado corretamente.
Portanto, uma opção é parar de criar (ou aceitar) patches ruins. :)
De volta ao mundo real, esse é um recurso. Quando patch(1)
falha ao aplicar um segmento de correção ao arquivo original, ele salva a cópia temporária do arquivo original de maneira duradoura *.orig
, despeja o segmento rejeitado *.rej
e continua tentando aplicar segmentos de correção. A idéia é que você possa abrir o *.rej
arquivo e concluir o processo de correção manualmente, copiando bits e partes para o arquivo corrigido. O *.orig
arquivo também pode ser útil quando o processo de correção destrói acidentalmente algo e você precisa consultar a versão original para corrigi-lo.
Nem sempre corrijo um patch incorreto com o texto dos arquivos *.rej
e *.orig
, mas é bom tê-los, caso eu precise deles.
Depois de corrigir um patch incorreto, executei o seguinte script na raiz do projeto para limpar rapidamente as coisas:
#!/bin/bash
find . '(' \
-name \*-baseline -o \
-name \*-merge -o \
-name \*-original -o \
-name \*.orig -o \
-name \*.rej \
')' -delete
Eu o chamo cleanup-after-bad-patch
porque o nome longo se protege parcialmente contra a execução acidental, pois pode remover os arquivos que você ainda precisa. Para ser sincero, normalmente, eu o executo digitando clean
TabEnter, sendo suficiente para encontrar esse script nas PATH
máquinas de desenvolvimento.
Os padrões adicionais que ele procura são os arquivos emitidos pelo meu sistema de controle de versão preferido quando encontrar o mesmo problema durante uma operação de mesclagem. Você pode ajustá-lo para suas ferramentas VCS / SCM .
Para dizer patch não para backups produzir apenas omitir os -b
e quaisquer --backup-...
opções.
Para instruí-lo a não criar .rej
arquivos, adicione a -r -
opção ao comando
GNU patch 2.6
mac, talvez tente-r /dev/null
A --no-backup-if-mismatch
opção evitará os arquivos ".orig".
Você também pode tentar a --merge
opção, que cria um conflito no arquivo.
Em todos os casos, você deve ter uma maneira de voltar rapidamente a um bom estado se a mesclagem se tornar esmagadora.
Estou preso com o patch v2.5.4, onde -r -
faz com que ele crie arquivos rejeitados nomeados -
.
Descobri que, --reject-file=
ou seja, o valor vazio faz com que o patch falhe com o código de saída, 2
se ele tentar gravar um arquivo rejeitado. Se não houver rejeições, ele funcionará conforme o esperado. Embora não seja uma solução completa para a versão mais antiga do patch, em algumas circunstâncias isso pode ser aceitável ou desejado.
O melhor que eu pude imaginar (reconhecidamente uma maneira de varrer a sujeira para debaixo do tapete) é usar -r <tmpfile>
, ou seja:
# patch -r /tmp/deleteme.rej -i patchfile filetobepatched
já que na v2.5.8, -r -
na verdade , cria o -
arquivo.
patch -p1 -B / dev / null -r - <arquivo.patch
-B
sinalizador não envia a *.orig
saída para /dev/null
, como parece do seu comando. Acontece que usuários normais não podem gravar em arquivos chamados de coisas assim /dev/nullfoo.cpp
. Se você fizer isso como root, receberá lixo em sua /dev
árvore. Segundo, -r -
não suprime o *.rej
arquivo. Parece que isso ocorre porque o erro devido à -B
bandeira falsa impede que ele mostre o que realmente faria sem o -B
, que é criar um arquivo chamado -
no diretório atual.
man patch
: "-r Coloque rejeições no arquivo de rejeição, em vez do arquivo .rej padrão. Quando o arquivo de rejeição é -, descarte as rejeições."