2015-09-04 3 views
1
sous-arbre

J'ai été chargé de travailler sur un dépôt SVN organisé comme suit:branchement Subversion lorsque trunk/branches enfouies dans

REPO_ROOT 
    |-AAA 
    |-BBB 
    |-DDD 
     |-D1 
     |-D2 
     |-software 
      |-branches 
      |-tags 
      |-trunk 
    |-YYY 
    |-ZZZ 

Je travaille principalement sur ^/DDD/software/trunk. Maintenant, je voudrais créer une branche pour corriger les erreurs au ^/DDD/software/branches/error-fixing.

D'abord, j'ai créé et validé le répertoire ^/DDD/software/branches/error-fixing qui n'existait pas. Ensuite, j'ai créé une branche de tronc en utilisant la commande: $ svn copy svn+ssh://[email protected]/REPO_ROOT/DDD/software/trunk svn+ssh://[email protected]/REPO_ROOT/DDD/software/branches/error-fixing -m "Branching from trunk to error-fixing".

Maintenant, je dois passer à la bonne branche. Je suis à l'intérieur trunk et en utilisant la commande $ svn switch "^/DDD/software/branches/error-fixing" . mais cela échoue avec svn: E195012: Path '.' does not share common version control ancestry with the requested switch location.

Comment puis-je passer à la branche? (Première fois que je fais cela, donc j'ai peut-être fait quelque chose de mal.)

Répondre

2

Le problème provient de la façon dont la branche a été créée. J'ai d'abord créé le répertoire d'erreur, puis j'ai fait la copie svn. Cela provoque la copie du répertoire de tronc dans la correction d'erreur au lieu de son contenu, ce qui entraîne ^/DDD/software/branches/error-fixing/trunk/<files> au lieu de ^/DDD/software/branches/error-fixing/<files>. Trouvé sur la différence subtile here. C'est pourquoi le tronc et la correction d'erreurs ne partageaient pas une ascendance commune, le contenu était différent. Une fois que je ai svn-enlevé la correction d'erreur et ai fait la copie de svn sans créer précédemment la correction d'erreur, le commutateur de svn a fonctionné bien.

1

Lorsque vous avez créé la branche sur le serveur, vous venez de copier le contenu du tronc dans la branche.

En réalité, lorsque vous changez, une fusion est faite en arrière-plan, ce n'est pas juste une sorte de pointeur. Comme la branche est nouvelle, elle n'a pas de ligne d'historique, car aucun commit n'a été effectué. Si je ne me trompe pas, vous devez vérifier la succursale localement, faire les modifications, valider puis passer à la branche (après que les commits aient créé l'historique).

Pour un test rapide, checkout, fait une petite modification, valider puis basculer. Difficile, je ne recommande pas de changer souvent, surtout pour les branches! Vous devez fusionner la branche dans le tronc, tester le tronc, puis créer une étiquette et basculer le serveur sur l'étiquette, jamais sur la branche.

+0

J'ai découvert quel était le problème mais merci quand même! (Posté la correction sur une réponse.) – Daniel