2009-10-13 6 views
34

J'avais une branche privée à laquelle j'ai fait une tonne de commit, puis je l'ai fusionnée en trunk, et j'ai fait quelques petites modifications là-bas.SVN: Créer un diff pour beaucoup de révisions

Maintenant le mainteneur de tronc veut un différentiel de tous mes changements, nous avons besoin d'un retour en arrière.

Comment puis-je créer ceci? Si vous avez besoin des numéros pour vos exemples, supposons que

224446

était ma principale révision où je fusionné dans le tronc,

224453 et 224462

étaient mes petites corrections et j'ai d'innombrables changements quand dans ma branche privée.

Solution (via Martin)

svn diff -r 224452:224453 > ~/tmp/diff.1 
svn diff -r 224462:224463 > ~/tmp/diff.2 
svn up -r224446 
patch < ~/tmp/diff.1 -p0 
patch < ~/tmp/diff.2 -p0 
svn diff -r 224445 > ~/tmp/changes.patch 

mail, puis ~/tmp/changes.patch à notre mainteneur de coffre en lieu sûr.

+2

pas Au cas où la deuxième ligne est 'svn diff -r 224461 : 224462> ~/tmp/diff.2'? – Muhd

Répondre

31

Une procédure possible serait de le faire:

  1. créer diffs pour 224453 et 224462 (par exemple par svn diff -r 224452:224453 > diff1.patch).
  2. départ 224446 (svn up -r224446)
  3. appliquer les diffs (par exemple patch -p0 -i diff1.patch)
  4. créer une diff de ce contre 224445 (svn diff -r 224445 > diff2.patch)
7

Une option serait de créer une branche à 224446, puis fusionner en 224453 et 224462. Ensuite, prenez un diff entre cela et 224445 sur le tronc. Cela devrait être tous les changements dans un, et vous pouvez créer un fichier correctif si vous devez:

# Branch from your initial checkin 
svn cp svn://xyz/[email protected] svn://xyz/branches/foo 

# Check it out 
svn checkout svn://xyz/branches/foo tmp 

# Merge in the two changes 
svn merge -c 224453,224462 svn://xyz/trunk tmp 

# Commit the changes 
svn commit tmp -m "Extra commits 224453 and 224462" 

# Diff the branch from mainline before original 
svn diff svn://xyz/[email protected] svn://xyz/branches/foo 

Ceci est en grande partie le même que la réponse de Martin, juste différentes façons d'appliquer les modifications et obtenir le diffs. Notez que bien que dans ce cas j'ai engagé les changements, vous n'avez pas vraiment besoin - vous pouvez simplement faire svn diff svn://xyz/[email protected] tmp au lieu des deux dernières commandes. La bonne chose à propos de l'avoir dans le dépôt est alors quelqu'un peut appliquer le diff en arrière pour le faire rouler, si cela est nécessaire.

+0

sonne bien. Je ne suis pas très familier avec SVN, pouvez-vous poster quelques commandes? –

+0

+1 pour la solution de Jon. Qu'en est-il lorsque vous ajoutez une autre révision? Ensuite, le patch entier doit être régénéré. Les correctifs sont bons quand vous n'avez pas d'accès de commit. – cetnar

+1

J'ai presque raté le post-scriptum à la solution de Jon; vous pouvez également ignorer l'étape svn cp et simplement svn co svn: // xyz/trunk @ 224446 tmp'. Cela fonctionne même si vous n'êtes pas autorisé à modifier le référentiel directement. –

Questions connexes