Diffs podem ser mais complicados do que apenas comparar um arquivo com outro. O pode comparar hierarquias de diretório inteiras. Considere o exemplo que eu quero corrigir um bug no GCC. Minha alteração adiciona uma linha ou duas em 4 ou 5 arquivos e exclui um punhado de linhas nesses e em outros arquivos. Se eu quiser comunicar essas mudanças a alguém, possivelmente para inclusão no GCC, minhas opções são
- Copie toda a árvore de fontes
- Copie somente os arquivos que foram alterados
- Forneça apenas as alterações que fiz
Copiar toda a árvore de fontes não faz sentido, mas e as outras duas opções, que estão no centro da sua pergunta. Agora, considere que outra pessoa também trabalhou no mesmo arquivo que eu e nós duas demos nossas alterações a alguém. Como essa pessoa saberá o que fizemos e se as alterações são compatíveis (partes diferentes do arquivo) ou conflito (mesmas linhas do arquivo)? Ele vai diferenciá-los! O diff pode dizer a ele como os arquivos diferem uns dos outros e do arquivo de origem não modificado. Se o diff é o que é necessário, faz mais sentido apenas enviar o diff em primeiro lugar. Um diff também pode conter mudanças de mais de um arquivo, então enquanto eu editei 9 arquivos no total, eu posso fornecer um único arquivo de diferenças para descrever essas mudanças.
Diffs também podem ser usados para fornecer histórico. E se uma mudança de três meses atrás causou um bug que eu só descobri hoje. Se eu puder diminuir quando o bug foi introduzido e puder isolá-lo para uma alteração específica, posso usar o diff para "desfazer" ou reverter a alteração. Isso não é algo que eu poderia fazer tão facilmente se estivesse copiando apenas arquivos.
Tudo isso vincula-se ao controle de versão de origem, onde os programas podem registrar o histórico de arquivos como uma série de diferenças desde o momento em que foram criados até hoje. Os diffs fornecem histórico (eu posso recriar o arquivo como era em qualquer dia em particular), eu posso ver quem culpar por quebrar algo (o diff tem um dono) e posso facilmente enviar alterações para projetos upstream dando-lhes diffs específicos ( talvez eles estejam interessados apenas em uma mudança quando eu fiz muitos).
Em resumo, sim, cp
é mais fácil que diff
e patch
, mas a utilidade de diff
e patch
é maior que cp
para situações em que os arquivos são importantes para rastrear.