2008-10-01 6 views
18

J'ai quelques modifications locales à un projet open source qui utilise Subversion comme contrôle de source. (Je n'ai pas d'accès de validation sur le référentiel de projet d'origine.)subversion diff incluant les nouveaux fichiers

Ma modification ajoute un fichier, mais ce fichier n'est pas inclus dans la sortie de "svn diff". (Il peut être utile de noter que le nouveau fichier est un fichier binaire, pas un texte brut.)

Comment puis-je créer un patch qui inclut les nouveaux fichiers?


$ svn st 
    A  tests/foo.zip 
$ svn diff 
$ 
+4

Je suis vraiment intéressé par la réponse à cette question lorsque le fichier est * pas * binaire. – Glyph

+0

@Glyph: jetez un oeil ici: http://stackoverflow.com/q/4248768/427532 –

Répondre

6

Le fait que votre fichier soit binaire est exactement pourquoi il n'est pas affiché, j'ai peur. La commande diff de Subversion ne fait que des différences/correctifs textuels (même si Subversion peut gérer en interne les différences de fichiers binaires entre les versions).

+1

arg! une autre raison pour laquelle je n'aime pas la subversion. git patches gère les fichiers binaires en douceur si quelqu'un a besoin d'une alternative –

0

Si vous construisez un patch, vous pouvez utiliser le bon vieux « diff » avec l'option --new fichier qui traite comme vider le fichier manquant.

Notez que la syntaxe de cette option peut en fait varier en fonction de la version de l'ancienne version que vous utilisez.

12

Il existe une option --force pour la commande diff, mais elle produit un fichier correctif incorrect pour les binaires sur ma machine. Son utilisation avec l'option --diff-cmd fonctionne pour moi bien:

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

Je pense que ce produit exactement ce que vous vouliez.

26

J'ai rencontré un comportement similaire à Pozsar. Et sa réponse a fonctionné pour moi mieux que la normale svn diff - force. Cependant, si vous utilisez une machine DOS (par exemple via Cygwin), vous devrez peut-être modifier légèrement sa réponse. Le diff + patch suivant travaillé pour patcher mon texte + fichiers binaires dans Cygwin en utilisant le arg --binary:

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

patch -p0 --binary -i mybinarydiff.diff 
Questions connexes