Comment faire produire un fichier svn diff que ce patch appliquerait, quand svn cp ou svn mv était utilisé?

Le scénario est le suivant:

  1. svn cp ou mv certains fichiers
  2. modifier ce fichier
  3. svn diff> mypatch

Sur une autre machine (même copie de travail, mais aucune modification):

  1. Essayez d’appliquer mypatch.
  2. Fail -> essaie de modifier un fichier inexistant.

Comment puis-je faire en sorte que svn diff produise un patch applicable à un patch ou applique proprement un patch produit par svn diff dans ce cas? Je ne peux pas m’engager Je voudrais conserver mergeinfo (car la solution évidente consiste à append le fichier comme totalement nouveau, sans connexion au précédent).

Avec subversion, vous pouvez spécifier le diff binary à utiliser et les parameters à lui transmettre. Voir le manuel sur svn diff.

Vous souhaitez produire un fichier de correctif standard à partir d’un fichier svn diff, vous souhaitez donc que svn diff ressemble à un diff normal. Essaye ça:

svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch ... patch -p0 < mypatch 

Preuve de concept:

 echo "newline" >> README.txt svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch cp README.txt README.txt.patched svn revert README.txt patch -p0 < mypatch diff README.txt README.txt.patched 

Aucune différence dans les deux fichiers après la correction.

Si vous voulez également vous débarrasser des propriétés svn dans vos correctifs, il existe une option pour cela:

 svn diff --patch-compatible > mypatch.diff 

svn help diff dit:

  --patch-compatible : generate diff suitable for generic third-party patch tools; currently the same as --show-copies-as-adds --ignore-properties 

Les patchs créés de cette manière sont supposés être compatibles avec le bon vieux utilitaire de patch simple.

Avez-vous essayé l’ --show-copies-as-adds mentionnée sur la page Web svn diff et décrite sur la page d’ options svn ?

Sans comprendre le scénario spécifique sur lequel vous essayez de travailler, il est difficile d’identifier pourquoi vous souhaitez le faire. J’ai l’impression que vous essayez de faire des changements contrôlés dans un environnement isolé pour éviter d’avoir un impact sur d’autres utilisateurs / applications.

Pourriez-vous résoudre ce problème par;

  • Créer une twig pour votre changement de code
  • Effectuez votre copie / déplacement et les modifications sur la twig
  • Demander à l’autre partie de passer à cette nouvelle twig de code et continuer à partager cette twig

Lorsque vous êtes tous les deux d’accord avec les modifications fusionner dans le tronc en utilisant l’argument –reintegrate et rm la twig?

Cela permettrait * de conserver les informations de fusion * d’identifier la copie / le déplacement et les modifications du contrôle de version * d’isoler encore les modifications des autres utilisateurs * d’éviter que des modifications incomplètes lors de l’étape 2 ne se produisent