Existe uma maneira de mesclar automaticamente patches personalizados com pacotes upstream quando eles são atualizados? Pelo que reuni até agora, modificar o código-fonte requer que você mantenha uma bifurcação separada de pacotes que você precisa manter.
Espero que, em vez disso, algum gerenciador de pacotes ou outra ferramenta possa corrigir automaticamente pequenas alterações (diferentes combinações de teclas, ícones etc.) em cada atualização.
É algo que não deveria ser feito? Ele foi projetado dessa maneira intencionalmente para impedir que os usuários "monominem" suas alterações personalizadas e, em vez disso, contribuam com o upstream?
ObXkcd: https://xkcd.com/1319/
Como qualquer coisa, isso pode ser automatizado, com algumas restrições; especificamente, suas alterações podem não se aplicar mais a um upstream atualizado.
Se você estiver rastreando um projeto upstream (em vez de pacotes), poderá fazer suas alterações em uma ramificação e rebase periodicamente a ramificação. Por exemplo, um trabalho cron poderia fazer
para rebasear o branch atual em um determinado repositório no branch principal no repositório upstream (supondo que o remoto seja nomeado “upstream”); se for bem-sucedido, seu repositório será atualizado com as alterações aplicadas e, se não for, você receberá um e-mail e terá que resolver as coisas manualmente.
Você pode abortar automaticamente o rebase se preferir:
Observe que, mesmo que pareça bem-sucedido, o resultado pode não funcionar; é totalmente possível que alterações upstream tornem um patch downstream inválido, enquanto ainda permite que o patch seja aplicado.
Se você estiver rastreando pacotes, pode haver ferramentas disponíveis para ajudá-lo. Por exemplo, derivados do Debian têm
apt-src
, que podem ser usados para instalar pacotes a partir do código-fonte. Ele suporta umaupgrade
operação que atualizará os pacotes fonte instalados localmente, enquanto tenta preservar as alterações locais.