Domanda

Ho alcune modifiche locali a un progetto open source che utilizza Subversion come controllo del codice sorgente. (Non ho accesso di commit sul repository del progetto originale.)

La mia modifica aggiunge un file, ma questo file non è incluso nell'output di " svn diff " ;. (Vale la pena notare che il nuovo file è un testo binario, non semplice.)

Come posso creare una patch che include i nuovi file?


 $ svn st
   A      tests/foo.zip
 $ svn diff
 $
È stato utile?

Soluzione

Il fatto che il tuo file sia binario è esattamente il motivo per cui non viene visualizzato, temo. Il comando diff di Subversion fa solo differenze / patch testuali (anche se Subversion internamente può gestire le differenze dei file binari in modo efficiente tra le versioni).

Altri suggerimenti

Ho avuto un comportamento simile a Pozsar. E la sua risposta ha funzionato per me meglio del normale svn diff - force. Tuttavia, se in esecuzione su un computer DOS (ad esempio tramite Cygwin), potrebbe essere necessario modificare leggermente la sua risposta. La seguente patch diff + ha funzionato per patchare il mio testo + file binari in Cygwin usando --binary arg:

svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" OLD-URL NEW-URL > mybinarydiff.diff

patch -p0 --binary -i mybinarydiff.diff

Esiste un'opzione --force per il comando diff, ma produce un file patch errato per i binari sulla mia macchina. Usarlo con l'opzione --diff-cmd funziona per me però:

svn diff --force --diff-cmd /usr/bin/diff -x -au

Penso che questo produca esattamente quello che volevi.

Se stai costruendo una patch, potresti voler usare semplicemente il vecchio 'diff' con l'opzione --new-file che tratta il file mancante come vuoto.

Nota che la sintassi per questa opzione può effettivamente variare a seconda della versione del vecchio diff diffuso che stai usando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top