2009-06-05 8 views
3

Nous avons besoin de garder .dlls dans notre dépôt. Notre équipe éprouve des conflits SVN sur les fichiers .dll assez fréquemment et il est super ennuyeux. Pour une raison quelconque, même si le type mime des fichiers .dll est défini sur application/octet-stream, svn essaie toujours de les fusionner. De ce que j'ai trouvé here (que je jure comme les choses étaient), il est dit que tant que le type mime n'est pas du texte, svn n'essaiera pas de les fusionner. Mais regarder mes DLL me dit que svn fusionne aussi mes fichiers application/octet-stream (au moins je suppose que SVN fusionne, je ne sais pas pourquoi il y aurait un conflit sans fusion). Pourquoi diable svn essayer de fusionner un fichier binaire? C'est juste stupide ...Comment empêcher Subversion de fusionner des fichiers binaires?

Quelqu'un rencontre ce problème?

Mon but est de trouver une solution permettant aux fichiers binaires de faire partie du référentiel, mais ne jamais être en conflit. Je veux que SVN remplace juste avec le plus nouveau binaire et l'appelle bon.

Veuillez ne pas expliquer pourquoi je devrais ou ne devrais pas mettre des fichiers binaires dans le dépôt - je dois et je ne veux pas de problèmes de conflit.

En tant que FYI: j'utilise à la fois Tortoise 1.5.0 et Ankh.

+0

Pas une réponse, juste une reformulation de la politique qui semble être violée dans votre environnement: http://subversion.tigris.org/faq.html#binary-files –

+2

Comment pouvez-vous voir qu'il essaie de les fusionner? ? Un conflit n'est pas la preuve qu'il essaie de les fusionner –

+1

Je suppose simplement qu'ils essaient de fusionner, car certaines mises à jour ne causent pas de conflits et d'autres le font. Je veux que les conflits s'arrêtent - pas sûr de ce que le point de conflits sont si vous ne pouvez pas comparer/fusionner – Mario

Répondre

3

Pour vous assurer que je vous comprends bien, Récapitulons:

  • vous avez des fichiers binaires vérifiés dans le svn
  • ces fichiers peuvent changer à la fois côté client et dans le référentiel
  • chaque fois que les deux sont changé, les modifications du référentiel doivent « gagner »

AFAIK, la manière svn faire ce serait:

  • run « svn update --accept leur plein » sur les fichiers binaires
  • run régulièrement « de mise à jour svn » sur toute copie locale

Je ne pense pas que cela puisse se faire dans un commande, et je ne pense pas que ce soit faisable dans une commande, car cette première commande peut perdre des données précieuses.

+0

Les fichiers ne changent jamais dans le référentiel, ils changent évidemment d'un client mettant à jour ce fichier dans le référentiel. Comme ils sont binaires (par exemple un document Word ou un diagramme), ils ne doivent jamais être fusionnés, juste remplacés. Peut-être que j'ai décrit ce problème, mais tout ce que je veux faire, c'est que svn n'essaie jamais de fusionner et qu'il obtienne simplement la version la plus récente sur les fichiers binaires – Mario

+0

C'est exactement ce que décrit cette réponse; le --accept theirs-full jette tous les changements locaux quand il y a des changements entrants. Cela signifie que si vous avez un document Word modifié, et que quelqu'un d'autre l'a modifié, et que vous mettez svn update --accept the-full, votre version est perdue et mise à jour avec celle de votre collègue –

-1

Ces fichiers dll, sont-ils construits en sortie à partir des projets réels?

Si c'est le cas, ils ne devraient pas être du tout mis en svn. Subversion doit contenir les fichiers source, et un serveur de construction/boîte de dev peut construire les dll à partir de là.

+2

Je préfère garder ceci sur le sujet - comment éviter les binaires conflictuels – Mario

+0

La sortie de la version non versionnée quand il n'y a pas besoin est un excellent moyen d'empêcher les binaires conflictuels. Vous ne pouvez pas empêcher les conflits si votre copie et la copie sur le serveur ont toutes deux changé. –

1

Si le fichier a été modifié sur le serveur et vous rencontrerez évidemment un conflit. Bien sûr, la mise à jour de la copie de travail inclut la mise à jour des fichiers binaires car ils font partie des révisions. Cela ne signifie pas que svn essaie de les fusionner, mais vous aurez certainement un conflit. Si ces fichiers sont changés fréquemment, je suppose qu'ils sont générés fréquemment - peut-être même les fichiers de sortie du compilateur. De tels fichiers ne devraient pas être dans le référentiel du tout.

Si vous avez besoin d'archiver des binaires de version (ou similaire), vous devez le faire sur une étiquette ou une branche de publication, mais pas sur le tronc.

+0

Le balisage de la source devrait être suffisant pour recréer les binaires. L'archivage des fichiers binaires n'est pas une tâche pour le contrôle de la source. –

+0

Bien que je suis entièrement d'accord avec ces entreprises/gestionnaires semblent penser différemment. Au moins de mon expérience, d'où le commentaire. – bluebrother

+1

Vous ne voudrez peut-être pas recompiler les bibliothèques de base très souvent. Donc, dans ces cas, je pense qu'il est logique de mettre des DLL dans svn. – Ryu

0

Etes-vous sûr qu'il essaie de les fusionner? Cela ressemble plus à un conflit, car Subversion ne sait pas comment les fusionner (ce que vous ne voulez pas faire de toute façon). Que voulez-vous exactement que se passe-t-il si vous avez une DLL modifiée localement et que quelqu'un commet la même DLL avant de le faire? Qu'attendez-vous qu'il se passe? Ceci est évidemment un conflit et Subversion ne sait pas si vous le souhaitez pour utiliser votre DLL ou leur DLL.

+1

Puisqu'il s'agit de fichiers binaires, je voudrais que svn les mette à jour, c'est tout. Pas de conflits, pas d'efforts pour fusionner - rien. Remplacez-le par le plus récent. – Mario

+0

Eh bien, dans ce cas, vous pourriez écrire un script de hook pré-commit qui vérifie un conflit et s'il le trouve, le résout en utilisant le fichier le plus récent. Malheureusement, je n'ai jamais écrit un script de crochet, donc je ne peux pas être d'une grande aide là-bas. –

+0

Un hook-script de pré-validation ne peut pas résoudre ce problème, car il s'agit d'un script côté serveur. Les conflits et la fusion se produisent lors de la mise à jour sur le client. –

1

Nous avons le même problème avec certains fichiers. CVS gère très bien ce problème, mais malheureusement, mon entreprise passe à Subversion.

Certains fichiers de configuration sont modifiés par notre application à chaque fois que vous l'exécutez, mais lorsque les développeurs vérifient de nouveaux changements, nous voulons qu'ils surpassent toujours le référentiel des utilisateurs. Dans le fichier .CVSwrappers, placez *.fileext -k b -m COPY. Cela indique à CVS de toujours faire une copie de sauvegarde du fichier dans le référentiel local et de télécharger la nouvelle version en cas de conflit. Si élégant.

Il n'existe aucune configuration équivalente pour SVN. Si quelqu'un sait comment, s'il vous plaît le poster.

Questions connexes