Subversion
En l'honneur du king of turtles
Changelog:
- 1.8: le reintegrate est automatique dans la commande svn merge
- 1.7: on voit les externals au lieu de voir des répertoires vides, svn patch
- 1.5: tree conflicts, support des external, ajout des mergeinfo
- 1.4: dry-run
Copies de branches
Petit truc trouvé en 2011 sur la version 1.6
- On cree une branche B2 qui est la copie d'une branche B1.
- On checkout B2 à une révision ancienne qui est dans B1 mais pas dans B2.
- Quand on commit, on update avant, et le commit va sur la branche B1....
Externals
Un external permet de lier une librairie externe provenant d'un autre SVN avec un projet existant. Documentation
Création:
svn pe svn:externals vendor/
Alternatives:
- vendor branch: utile quand c'est l'external qui "contient" le projet SVN.
- faire des exports de la librairie et checkout le projet par-dessus: NON car lorsque l'on va tenter de commit, TOUS les fichiers de la librairie apparaitront en non-versionné
- faire un checkout du projet et faire un export de la librairie ensuite: ne marchera pas car le projet sera déjà une working copy + voir le problème ci-dessus pour le commit
La science du merge
Record-only merge
Le record-only merge permet d'indiquer un merge comme étant réalisé dans les mergeinfo mais sans le réaliser en vrai. Uniquement utile pour réparer des mergeinfo.
merge --record-only
Reverse merge
Le reverse merge sert à annuler un commit sur le repository. (eh non, il ne faut pas utiliser la commande revert qui ne marche que sur des modifs locales).
- Règle d'or: c'est juste un merge dont le range à est
: (retour dans le passé) - Commencer par un
--dry-run
pour voir l'effet - Ne pas oublier de commiter...
Conflit sur reverse merge
On fait un reverse merge -r n:n-1, et on a un conflit:
C site/data/sql/donnees/20110909_chaine.actvation.sql
> local édition, suppression entrante sur fusion
L'opération qui a eu lieu en incoming pour SVN est une suppression. MAIS on est dans le cas d'un reverse merge, on retourne donc dans le passé. Est-ce que l'opération originale est réellement une suppression ? Ou une addition ?
Réponse: regarder dans le SVN log pour vérifier. Dans l'exemple donné, il s'agit d'une addition. Ce qui est inversé par retour vers le passé par une suppression. SVN est donc malin, il indique la bonne opération vue de la direction temporelle choisie !
Three way merge
Utilisé dans le cas d'une mise à jour de vendor branch. On veut appliquer les différences entre l'ancienne version et la nouvelle version sur une working copy qui utilise le vendor
- Branche de l'ancienne version vendor: /branch/1.0
- Branche de la nouvelle version vendor: /branch/1.1
- Répertoire où l'on développe sur le trunk avec le vendor: workingcopy/vendor
La commande est : svn merge url://branch/1.0 url://branch/1.1 workingcopy/vendor
Ignore
svn ps svn:ignore '*' directory/
.
si on est dans le répertoire auquel on veut faire porter l'ignore. On peut aussi indiquer un répertoire autre. Attention, la propriété sera portée par le directory visé et pas par le directory dans lequel on a lancé la commande.
* Pour voir les fichiers ignorés: svn st --no-ignore
Export
La commande svn export permet de sortir les fichiers d'une working copy svn (sans les fichiers .svn). Super, mais il y a d'autres règles :
- les fichiers qui ne sont pas versionnés ne sont pas exportés
- si un fichier versionné a été modifié sans être commité, alors il est exporté dans sa version working copy