2013-08-09 12 views
6

Sto creando una patch svn diff, tuttavia sembra che i file di immagine non vengano inclusi. La patch contiene linee simili per ogni file di immagine, come illustrato di seguito:Include il file immagine nella patch svn diff

Index: crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif 
=================================================================== 
Cannot display: file marked as a binary type. 
svn:mime-type = application/octet-stream 
Index: crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif 
=================================================================== 
--- crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif (revision 1510040) 
+++ crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif (working copy) 

Sto usando il seguente comando per creare una patch:

svn diff > test.diff 

Qualche suggerimento su come posso includere i file di immagine saranno apprezzato.

risposta

0

I file di immagine sono sempre inclusi nel vostro diff come indicato dalle linee con --- e +++ ma sono inclusi come interi file nella patch - questo è dovuto in parte al problema di come visualizzare in modo significativo le modifiche nei dati binari come le immagini in un formato solo testo - a meno che non si vogliano pagine di differenze esadecimali, come produrre fc -b a.gif b.gif.

Quindi ti dicono che i file sono cambiati e spetta a te decidere come vorresti confrontarli - per i file di immagine uno dei migliori confronti delle differenze significative è l'occhio umano - non ti aspetteresti un sistema di controllo di revisione per essere in grado di dirti "Questa era una foto di un uomo calvo accigliato, ma ora è una cheerleader bella rossa sorridente" vuoi?

+0

SVN non può attualmente creare file di patch unificati con dati binari. Se si ispeziona il file di correzione, come in Visual Studio, non ci sono dati binari lì. C'è una discussione su questa caratteristica mancante nel sito dev di Subversion: http://subversion.1072662.n5.nabble.com/Create-Apply-Patch-UTF-16-and-binary-support-td181079.html – Ron

+0

@Ron It non è specificatamente che SVN non possa produrre file diff unificati di file binari come file immagine, ma piuttosto che il formato diff unificato non includa alcun metodo per rappresentare le differenze tra due file binari. In generale il delta, in formato testo, è probabilmente più grande di una nuova copia del file a meno che la modifica non sia molto piccola e localizzata e anche in questo caso per i formati compressi come jpeg il delta tra i file potrebbe essere grande anche per un minore modificare. MPEG fa questo a) utilizzando un formato molto specifico per i fotogrammi chiave eb) usando il formato binario per i delta. –

2

SVN non supporta l'inclusione di file binari in diff. Come nota a margine: git supporta i file binari. Il file di patch risultante è simile al seguente:

diff --git a/bin/windows/SDL_mixer.dll b/bin/windows/SDL_mixer.dll 
new file mode 100644 
index 0000000000000000000000000000000000000000..f48ee2da696f92b66940b91b52aa53c2 
GIT binary patch 
literal 160256 
zcmd?S4SZD9)i*kmOyYopCrYBxf<%o9l`2uFL_&=TgA|RT7>j7Ev^CX7sg%wregu+E 
z26K8G$kPW}+uD|hZFwrKv_*([email protected]~XNJW(<Ug6wVlm;iDl0WbXgJ_BoSD06*UQ 
z-h1DBFF(yWXYaMwUVE*z*Is+=k13j2?MQYw94`DHi#Z&%c=BJq{Qc}d<;Xr~#Ovoc 
zRu6jXl3M4jZ(VZNLl6HbYtG!qzCU-??5yw3`oRw#^JRVK!K}IdA7nlJgRDunPtThD 

Quindi tecnicamente è possibile, semplicemente non funziona con svn. Quindi se hai un disperato bisogno di un file di patch che includa i binari, prova a spuntare svn usando git. È facile: git svn clone http://path/to/svn. Funziona anche allo stesso modo con svn://.... È quindi possibile creare un diff di git e applicare tale diff a qualsiasi target. L'obiettivo non deve necessariamente essere un repository git. git apply my.patch

+2

Subversion 1.9 permette di generare tali patch se si usa 'svn diff --git' invece di un semplice' svn diff' –

+1

@BertHuijben anche con '--git' si rifiuta di diffare i file binari. – npostavs

2

Con Suversion 1.9 è possibile utilizzare la bandiera --git per includere il contenuto binario del file di patch, ad esempio:

svn diff https://storage/svn/project/trunk --git -c 42 > patch-42.diff 

Subversion 1.8 hanno già bandiera --git, ma ignora contenuto binario con esso.

Problemi correlati