Como meu cliente pode aplicar o patch criado por git diff
sem o git instalado? Eu tentei usar o patch
comando, mas ele sempre pede o nome do arquivo para corrigir.
patch
não suporta totalmente esse formato.
Como meu cliente pode aplicar o patch criado por git diff
sem o git instalado? Eu tentei usar o patch
comando, mas ele sempre pede o nome do arquivo para corrigir.
patch
não suporta totalmente esse formato.
Respostas:
git diff > patchfile
e
patch -p1 < patchfile
funciona, mas como muitas pessoas notaram nos comentários e em outras respostas, o patch não entende adiciona, exclui e renomeia. Não há opção, mas git apply patchfile
se você precisar lidar com acréscimos, exclusões e renomeações de arquivos.
EDIT dezembro de 2015
As versões mais recentes do patch
comando (2.7, lançado em setembro de 2012) suportam a maioria dos recursos do formato "diff --git", incluindo renomeações e cópias, alterações de permissão e diferenças de vínculo simbólico (mas ainda não diferenças binárias) ( anúncio de versão ).
Portanto, desde que se use a versão atual / mais recente, patch
não há necessidade de usar git
para poder aplicar seu diff como um patch.
git diff > patchfile
, maspatch -p1 < patchfile
relative
opção como:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfile
não requer o git instalado. O primeiro comando demonstra o comando para gerar diff, não aplicando-o.
git diff from_branch > patchfile; git checkout from_branch; git patch -p1 < patchfile
ougit diff from_branch to_branch > patchfile; ...
Usar
git apply patchfile
se possível.
patch -p1 < patchfile
tem potencial efeito colateral.
git apply
também lida com adição, exclusão e renomeação de arquivos, se descritos no git diff
formato, o que patch
não funciona. Finalmente, git apply
é um modelo "aplicar tudo ou abortar tudo", onde tudo é aplicado ou nada é, enquanto o patch pode aplicar parcialmente os arquivos de patch, deixando seu diretório de trabalho em um estado estranho.
git apply
é a melhor maneira de fazer isso, mas essa pergunta pergunta especificamente como aplicar o patch sem o Git instalado .
--dry-run --verbose
são úteis para determinar quais serão os efeitos colaterais, se houver. (usando o patch v2.5.8) #
git apply patchfile -
... a única resposta sã ..." - isso é quase risível. Toda vez que os desenvolvedores do OpenSSL me enviam um patch para testar, o Git falha em aplicá-lo. Isso é sempre . Ainda não vi a ferramenta idiota aplicar um patch.
eu uso
patch -p1 --merge < patchfile
Dessa forma, os conflitos podem ser resolvidos como de costume.