È un buon modo per creare una patch?


15

Vorrei creare una patch da un gccramo specifico confrontandola con le versioni ufficiali; così quando scompatto il tarball dal rilascio stabile, posso applicare la patch e ottenere l'equivalente di ciò che era in quel ramo specifico.

È la prima volta che devo creare una patch, quindi è la prima volta che lo faccio e la mia principale preoccupazione è ottenere le opzioni e l'analisi proprio dal momento che stiamo parlando di un software estremamente importante

diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch

È abbastanza e il modo migliore per farlo?


Le solite buone pratiche qui implicano il controllo della versione o alcune varianti di queste. Ciò include, mercurial, git e le estensioni della coda di patch associate. Puoi anche prendere in considerazione la trapunta. Forse potresti approfondire ciò che stai cercando di fare?
Faheem Mitha,

@FaheemMitha cosa intendi con "maggiori dettagli"? Ho una versione gccdalla stalla ufficiale tar.bz2e un'altra versione instabile da un gitrepository, vorrei creare una patch, ovviamente vorrei confrontare solo con il masterramo, non l'intero repository.
user2485710

OK, beh, sicuro di poter usare qualcosa di semplice come diff. ma è generalmente preferibile utilizzare il controllo versione. Per prima cosa, rende molto più difficile perdere la cognizione di ciò che stai facendo.
Faheem Mitha,

@FaheemMitha Non capisco cosa stai suggerendo, il mio non tar.bz2è chiaramente un gitrepository, come pensi che dovrei procedere?
user2485710

1
Fai una ricerca per "creare patch usando il controllo versione". Due risposte precedenti che ho scritto che sono correlate sono unix.stackexchange.com/a/127810 e unix.stackexchange.com/a/139817
Faheem

Risposte:


20

Sì, questo è un buon modo per creare una patch.

In breve:

  1. Per creare una patch per un singolo file potrebbe apparire il tuo comando

    diff -Naru file_original file_updated > file.patch

    dove

    • -N: tratta i file assenti come vuoti
    • -a: tratta tutti i file come testo
    • -r: confronta ricorsivamente tutte le sottodirectory trovate
    • -u: output NUM (default 3) righe di contesto unificato
  2. Per creare patch per l'intera directory:

    diff -crB dir_original dir_updated > dfile.patch

    dove

    • -c: output NUM (default 3) righe di contesto copiato
    • -r: confronta ricorsivamente tutte le sottodirectory
    • -B: ignora le modifiche le cui righe sono tutte vuote

Dopotutto per applicare questa patch si può eseguire

patch -p1 --dry-run < dfile.patch

dove switch pindica alla patch di eliminare il prefisso del percorso in modo che i file vengano identificati correttamente. Nella maggior parte dei casi dovrebbe essere 1.

Rimuovi --dry-runse sei soddisfatto del risultato stampato sullo schermo.


domanda: cosa dovrebbe succedere se una directory o un file viene eliminato nel dir_updatedrispetto a quello che c'era dir_original? Se diffne occupa anche quello o viene saltato?
user2485710

@ user2485710 diff vede quali file sono stati eliminati. file.patchin un solo file di testo, in modo da poterlo aprire in qualsiasi editor o semplicemente cate vedrai una riga simileonly in dir_original: missingfile.txt
jimmij

ok, ma poi patchcancellerai quello missingfile.txto cos'altro?
user2485710

Dipende. Se vuoi rimuoverli usa diff -N ...come nel mio primo esempio. Normalmente patchrimuoverà i file vuoti per impostazione predefinita. Se non vuoi, usa solo diff -crBcome nella tua domanda. Anche in alcuni (rari) casi è necessaria l' -Eopzione nel patchcomando per rimuovere i file vuoti, dopo il manuale della 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
jimmij

ho corso diff -Naru dir/file dir/file.new > diff.patchottenendo can't find file to patch at input line 3con la patch -p0 --dry-run < diff.patchprima riga di patch legge la --- dir/fileseconda +++ dir/file.newcon i timestamp, il diff sembra essere giusto, c'è qualche opzione su come segnalare i nomi di file esatti che il comando cerca?
ptica,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.