Como meu cliente pode aplicar o patch criado por git diffsem o git instalado? Eu tentei usar o patchcomando, mas ele sempre pede o nome do arquivo para corrigir.
patchnão suporta totalmente esse formato.
Como meu cliente pode aplicar o patch criado por git diffsem o git instalado? Eu tentei usar o patchcomando, mas ele sempre pede o nome do arquivo para corrigir.
patchnã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 patchfilese você precisar lidar com acréscimos, exclusões e renomeações de arquivos.
EDIT dezembro de 2015
As versões mais recentes do patchcomando (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, patchnão há necessidade de usar gitpara poder aplicar seu diff como um patch.
git diff > patchfile, maspatch -p1 < patchfile
relativeopção como:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfilenã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 < patchfileougit diff from_branch to_branch > patchfile; ...
Usar
git apply patchfile
se possível.
patch -p1 < patchfile
tem potencial efeito colateral.
git applytambém lida com adição, exclusão e renomeação de arquivos, se descritos no git diffformato, o que patchnã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 --verbosesã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.