68 votes

Trouver la révision dans le tronc à partir de laquelle une branche a été créée

J'essaie de fusionner les dernières modifications du tronc dans une branche de mon projet, mais le problème est que je ne sais pas quelle révision du tronc que j'ai extraite et à partir de laquelle j'ai finalement créé la branche. Je pense que SVN a enregistré cette information quelque part. Quelqu'un sait-il comment je peux trouver le numéro de révision ?

(En d'autres termes, l'équivalent Subversion de git merge-base master branch-name )

1 votes

Si vous utilisez svn 1.5 ou plus, vous n'avez pas besoin de connaître ce numéro de révision pour effectuer la fusion. svn merge ^/trunk . le découvrira par lui-même. Si ce n'est pas le cas, vous devrez peut-être svnadmin upgrade votre dépôt.

0 votes

Hmmm... Subclipse demande la révision de départ, je vais devoir voir s'il peut faire une fusion de cette façon.

0 votes

@slowdog vous voulez dire la version du serveur, non ?

78voto

richq Points 29694

En ligne de commande, le drapeau --stop-on-copy peut être utilisé pour vous montrer d'où vous avez copié une branche :

svn log --stop-on-copy --verbose --limit 1 -r0:HEAD ^/branches/feature

(où feature est le nom de votre branche)

La dernière ligne de dira quelque chose comme ça :

Changed paths:
   A /branches/feature (from /trunk:1234)

0 votes

Ahh mec. J'aurais aimé qu'il y ait une option "arrêt sur les copies N" ! je vais devoir les traverser manuellement. merci !

0 votes

Je pense qu'un déplacement svn sera considéré comme une "copie" ... puisqu'il s'agit d'une copie et d'une suppression en une seule fois. Donc, si vous créez une branche, puis la renommez (rename comme dans la commande tortoise pour renommer), cela jettera les données "quand cette branche a-t-elle commencé ?". Je ne mentionne cela que parce que "renommer" ne ressemble pas à "créer" ....... Malheureusement, je l'ai appris à mes dépens.

1 votes

L'équivalent git de ceci est tellement plus logique... git merge-base master feature-branch . Et cela fonctionne bien pour les scripts.

22voto

perkrlsn Points 210

Peut-être un peu tard mais.

Si vous êtes actuellement dans la branche, vous pouvez vous présenter :

svn log -r 1:HEAD --limit 1 --stop-on-copy

Il affiche la première révision de la branche, c'est-à-dire la date à laquelle vous l'avez créée.

13voto

KOGI Points 2387

Utilisez-vous TortoiseSvn ou la ligne de commande ?

Ligne de commande : svn log --stop-on-copy et ensuite regarder le plus petit nombre rév.

Tortoise SVN : right-click, tortoise-svn, show log, make sure 'stop on copy' is *checked* and press refresh. Scroll to the bottom and find the smallest rev number. enter image description here

0 votes

En fait, j'utilisais Subclipse

1 votes

Pas tout à fait correct. Lorsque vous créez une branche, vous pouvez spécifier sur quelle révision la branche est basée (en utilisant -r) - ex. svn copy -r 1234 svn://foo.com/trunk svn://foo.com/branches/b1 . La révision de base n'est pas nécessairement la même que celle à laquelle la branche a été créée. La réponse de @richq montre comment l'obtenir correctement.

2voto

Si vous avez utilisé svn copy pour créer un tag/branch entonces svn log peut vous dire d'où vos affaires dans la branche ont été copiées. Par exemple, disons que nous avons svn://svn/trunk/foo et nous avons créé une branche svn://svn/branches/super_foo . Exécuter svn log -v svn://svn/branches/super_foo il vous dira quelque chose comme ceci - /branches/super_foo from /trunk/foo:22890 ce qui signifie que vous avez copié la révision 22890 du tronc dans votre branche.

0voto

Tono Wiedermann Points 377

Pour voir les chemins modifiés avec l'outil de ligne de commande TortoiseSVN actuel et pour interroger le repo sans avoir de checkout local, exécutez ceci (à partir de n'importe quel répertoire)

svn log --stop-on-copy --limit 1 --verbose -r0:HEAD "http://server:9876/svn/reponame/branches/branch name"

Avis --verbose pour afficher les chemins modifiés et l'URL explicite du repo/branche afin d'éviter d'avoir à les vérifier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X