2010-03-04 2 views
4

J'utilise actuellement SVN pour la gestion de la version de mes projets logiciels. Dans le cadre d'un projet en cours, j'ai le coffre, pour les caractéristiques et les spécifications communes aux clients, et les succursales, pour les clients spécifiques.Ignorer les fichiers/dossiers lors de la fusion

Y at-il un moyen de marquer certains fichiers/dossiers qui ne devraient pas être fusionnés dans les branches chaque fois que j'effectue une telle opération?

+0

duplication possible de [Comment ignorer le dossier lors de la fusion subversion] (http://stackoverflow.com/questions/1559552/how-to-ignore-folder-pendant-subversion-merge) –

Répondre

2

Il existe une option que vous fusionnez virtuellement, ce qui signifie que la fusion ne modifie pas les fichiers de la cible mais la marque dans les accessoires de suivi de fusion. De cette façon, les changements ne se produiront jamais dans les fichiers à fusionner, jamais!

Cette fonctionnalité est appelée enregistrement uniquement dans la version de ligne de commande.

De link text

L'option --record-ne fonctionne qu'avec -r et fait exactement ce que vous pensez qu'il fait: il marque une révision en fusion (ou unmerged, si vous utilisez le « - » numéro de révision syntaxe de négation), sans changer quoi que ce soit d'autre que le mergeinfo. Par exemple, cela serait utile lorsque quelqu'un a modifié manuellement un fichier de manière à incorporer efficacement une modification déjà effectuée ailleurs. Plutôt que de faire porter la modification d'origine sur la prochaine fusion de synchronisation, risquant ainsi des conflits textuels à chaque fois que les deux versions diffèrent trivialement, vous pouvez simplement enregistrer la modification comme déjà fusionnée. Pour plus de détails, voir les conditions de suivi de la fusion et Blocking Changes dans le livre Subversion.

2

Je ne vois pas immédiatement une solution, mais il serait assez facile d'écrire quelque chose. Ce que je vous donne n'est pas testé.

Vous devez d'abord créer une liste de répertoires que vous souhaitez exclure. Appelé ~/svn-fusion-exclut

#regexes to exclude 
./helpfiles/ 
./deploy_scripts/ 
./models/customer_integration 

Ensuite, vous écrire un autre script pour revenir ces répertoires dans la branche après fusion de la turnk en eux.

#/usr/bin/bash 
# I am assuming that you made the excludes based on the root directory 
# so that relative paths will work 
for dir in $(cat ~/.svn-merge-excludes) ; do 
    svn revert -R $dir 
done 

Cela devrait fonctionner. La grande chose ici est l'option '-R' dans le retour agissant récursivement sur le répertoire. Par conséquent, votre flux de travail ressemblera à quelque chose comme.

# cd path/to/branch 
# svn merge -r123:245 svn://svnserver.com/svn/trunk 
# revert_excludes_from_branch.sh 

Ensuite, vous gérer les conflits et ensuite valider. Si vous utilisez Windows alors un fichier batch fonctionnerait aussi, vous pourriez simplement taper les commandes de retour en série.