2012-04-02 10 views
49

So che ci sono già diversi thread su questo, ma nessuno ha spiegato esattamente come eseguire il diff iniziale per creare il file di patch, quindi come applicare quella patch alla directory iniziale per aggiornarlo.Come creare una patch per un'intera directory per aggiornarla?

Nel mio caso, esiste una directory di file che chiunque può scaricare dal web. Ho preso quella directory e le ho apportate delle modifiche, e voglio creare un file di patch in modo che altri possano applicarlo alla directory scaricata per riprodurre esattamente ciò che ho nella mia directory modificata.

Aiuto? Cosa devo dire all'altra persona in merito a come applicare la patch?

risposta

91

Ho appena avuto lo stesso problema: molti consigli su come farlo a metà. Bene, ecco quello che ho fatto per ottenere sia la patch e unpatching a lavorare:

Per creare il file di patch:

  1. copie Mettere su entrambe le directory in diciamo/tmp, in modo che possiamo creare la patch file, o se coraggioso, metterli fianco a fianco - in una directory.

  2. eseguire un diff appropriato sui due directory, vecchi e nuovi:

    diff -ruN orig/ new/ > file.patch 
    # -r == recursive, so do subdirectories 
    # -u == unified style, if your system lacks it or if recipient 
    #  may not have it, use "-c" 
    # -N == treat absent files as empty 
    

Se una persona ha l'orig/directory, possono ricreare il nuovo eseguendo patch.

per ricreare la nuova cartella dalla vecchia cartella e file di patch:

  1. Spostare il file di patch in una directory in cui è presente l'orig/cartella

  2. Questa cartella vengono rovinati, quindi mantenere una backup di esso da qualche parte, o utilizzare una copia.

    patch -s -p0 < file.patch 
    # -s == silent except errors 
    # -p0 == needed to find the proper folder 
    
  3. A questo punto, l'orig/cartella contiene il nuovo/contenuti, ma ancora ha il suo vecchio nome, quindi:

    mv orig/ new/ # if the folder names are different 
    
+3

Vorrei poterti stringere la mano. Grazie mille! – poundifdef

+0

@DavidH Funziona su Windows con Cygwin? – onmyway133

+0

Sono un mac, quindi non ne ho idea. Quello che devi fare è controllare le opzioni per patch e diff su Cygwin. Ecco perché ho aggiunto i commenti sopra su cosa significano le opzioni - quindi se uno o l'altro programma offre opzioni diverse puoi capire cosa cambiare per farlo funzionare. Concettualmente tutti i programmi patch/diff dovrebbero supportare la funzionalità. –

2

Partenza open source Scarab libreria C++: https://github.com/loyso/Scarab

Fa esattamente quello che hai descritto. Costruisce diff per file usando la libreria xdelta e lo inserisce nel pacchetto di archiviazione. È possibile ridistribuire quel pacchetto e applicare la differenza. Esistono binari per Win32.

Sono l'autore del progetto Scarab.

Problemi correlati