Eu gostaria de criar um patch de um gcc
ramo específico comparando-o com os lançamentos oficiais; então, quando eu descompactar o tarball da versão estável, posso aplicar o patch e obter o equivalente ao que estava naquele ramo específico.
É a primeira vez que preciso criar um patch, então é a primeira vez que faço isso e minha principal preocupação é obter as opções e a análise corretas, pois estamos falando de um software extremamente importante
diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch
Isso é suficiente e a melhor maneira de fazê-lo?
gcc
stable oficialtar.bz2
e outra versão instável a partir de umgit
repositório. Gostaria de criar um patch, é claro que gostaria de comparar apenas com omaster
ramo, e não com o repositório inteiro.tar.bz2
claramente não é umgit
repositório, como você acha que devo proceder?Respostas:
Sim, esta é uma boa maneira de criar um patch.
Em resumo:
Para criar um patch para um único arquivo, seu comando pode parecer
diff -Naru file_original file_updated > file.patch
Onde
-N
: tratar arquivos ausentes como vazios-a
: tratar todos os arquivos como texto-r
: compare recursivamente todos os subdiretórios encontrados-u
: gera NUM (padrão 3) linhas de contexto unificadoPara criar um patch para o diretório inteiro:
diff -crB dir_original dir_updated > dfile.patch
Onde
-c
: gera NUM (padrão 3) linhas do contexto copiado-r
: compare recursivamente quaisquer subdiretórios-B
: ignora as alterações cujas linhas estão todas em brancoAfinal, para aplicar esse patch, é possível executar
onde switch
p
instrui o patch a remover o prefixo do caminho para que os arquivos sejam identificados corretamente. Na maioria dos casos, deveria ser1
.Remova
--dry-run
se você estiver satisfeito com o resultado impresso na tela.fonte
dir_updated
comparação com o que haviadir_original
? Elediff
cuida disso também ou é pulado?file.patch
em apenas um arquivo de texto, para que possa abri-lo em qualquer editor ou apenascat
ele e você vai ver uma linha comoonly in dir_original: missingfile.txt
patch
excluirá issomissingfile.txt
ou o que mais?diff -N ...
como no meu primeiro exemplo. Normalmentepatch
, os arquivos vazios serão removidos por padrão. Se você não quiser, use apenasdiff -crB
como na sua pergunta. Também em alguns casos (raros) é necessária a-E
opção nopatch
comando para remover arquivos vazios, após o manual do patch:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
diff -Naru dir/file dir/file.new > diff.patch
ficandocan't find file to patch at input line 3
com apatch -p0 --dry-run < diff.patch
primeira linha de patch lê a--- dir/file
segunda+++ dir/file.new
com timestamps, o diff parece estar correto, existe alguma opção de como informar os nomes de arquivos exatos que o comando procura?