2008-09-16 10 views
13

Existe-t-il un système de contrôle de version distribuée (git, bazaar, mercurial, darcs, etc.) pouvant gérer des fichiers plus volumineux que la RAM disponible? Je dois être capable de commettre de gros fichiers binaires (jeux de données, vidéos/images sources, archives), mais je n'ai pas besoin de pouvoir les différencier, juste pouvoir valider et ensuite mettre à jour quand le fichier changements.Existe-t-il un VCS distribué pouvant gérer des fichiers volumineux?

Je l'ai regardé pour la dernière fois il y a environ un an, et aucun des candidats évidents ne le permettait, car ils sont tous conçus pour différer la mémoire de la vitesse. Cela m'a laissé avec un VCS pour gérer le code et quelque chose d'autre (logiciel de «gestion des actifs» ou simplement rsync et scripts) pour les gros fichiers, ce qui est assez moche quand les structures de répertoires des deux se chevauchent.

Répondre

12

Il fait 3 ans que j'ai posé cette question, mais, à partir de la version 2.0 Mercurial comprend le largefiles extension, qui accomplit ce que je cherchais à l'origine pour:

Le L'extension largefiles permet de suivre de gros fichiers binaires incompressibles dans Mercurial sans nécessiter une bande passante excessive pour les clones et les tractions. Les fichiers ajoutés en tant que fichiers volumineux ne sont pas suivis directement par Mercurial; plutôt, leurs révisions sont identifiées par une somme de contrôle, et Mercurial suit ces sommes de contrôle. De cette façon, lorsque vous clonez un référentiel ou que vous insérez des modifications, les fichiers volumineux dans les révisions plus anciennes du référentiel ne sont pas nécessaires, et seuls ceux nécessaires à la mise à jour vers la version actuelle sont téléchargés.Cela économise de l'espace disque et de la bande passante.

2

Je pense qu'il serait inefficace de stocker des fichiers binaires dans n'importe quelle forme de système de contrôle de version.

La meilleure idée serait de stocker des fichiers de métadonnées dans le référentiel qui référencent les objets binaires.

+0

Merci pour votre réponse. Mais oui, je voulais dire ce que j'ai demandé. J'ai besoin de version fichiers volumineux - il existe une autre classe de logiciels "gestion des actifs de l'entreprise" qui est essentiellement VCS/Aperture/Version Cue sur un serveur pour les actifs médias. – joelhardi

+1

Je pense que le point que j'essayais de faire (pas assez de café, je le crains) était que la majorité des systèmes VCS ne sont pas conçus pour la version des objets binaires. Comme vous le dites, ils font des diffs en mémoire et stockent le delta ... Les binaires de version n'ont pas grand intérêt car ils sont intrinsèques. – pobk

0

Faut-il le distribuer? Supposément le seul grand avantage subversion a VCSes plus récent et distribué est sa capacité supérieure à traiter les fichiers binaires.

+0

Merci pour la réponse, mais oui, c'est le cas. Je suis d'accord que SVN gère bien les fichiers binaires - ce qui fait partie de ce qui me mystifie que les VCSes que j'ai testés précédemment ont agi comme si segfaulting sur un fichier de 400 Mo est un comportement acceptable. – joelhardi

10

Aucun système de contrôle de version distribué gratuit ne le permet. Si vous voulez cette fonctionnalité, vous devrez l'implémenter.

Vous pouvez écrire git: ils s'intéressent aux performances brutes pour le cas d'utilisation du développement du noyau Linux. Il est improbable qu'ils acceptent le compromis de performance pour la mise à l'échelle d'énormes fichiers binaires. Je ne sais pas à propos de Mercurial, mais ils semblent avoir fait des choix similaires à git en couplant leur modèle d'exploitation à leur modèle de stockage pour la performance. En principe, Bazaar devrait être capable de supporter votre cas d'utilisation avec un plugin qui implémente les formats tree/branch/repository dont le stockage sur disque et la stratégie d'implémentation sont optimisés pour votre cas d'utilisation. Dans le cas où l'architecture interne vous bloque et que vous libérez du code utile, je m'attends à ce que les principaux développeurs aident à corriger l'architecture interne. En outre, vous pouvez mettre en place un contrat de développement de fonctionnalités avec Canonical. Probablement l'approche la plus pragmatique, indépendamment du DVCS spécifique serait de construire un système hybride: implémenter un magasin de fichiers volumineux, et stocker des références aux blobs dans ce magasin dans le DVCS de votre choix. Description complète: Je suis un ancien employé de Canonical et j'ai travaillé en étroite collaboration avec les développeurs de Bazaar.

+0

Merci beaucoup pour la réponse. J'ai correspondu avec certains développeurs Hg et BZR l'année dernière et ce qu'ils disent reflète votre évaluation - les gens de BZR ont dit "Hmm c'est intéressant, vous pourriez le coder" et nous l'avons considéré mais le coût du temps n'a pas de sens par rapport à utilisant SVN ou piratage ... – joelhardi

+0

... jusqu'à une solution hybride où nous commettons des hachages de fichiers ou quelque chose. Les projets DVCS semblent tous être fortement influencés par le cas d'utilisation de développement de logiciels libres et distribués, contrairement aux produits SVN et commerciaux, qui ont un large éventail d'utilisations à l'esprit. Hg et BZR sont de grands projets, tant pis pour moi. – joelhardi

4

Oui, Plastic SCM. Il est distribué et il gère des fichiers volumineux en blocs de 4 Mo donc il n'est pas limité en les chargeant entièrement sur mem à tout moment. Trouver un tutoriel sur DVCS ici: http://codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

+0

Merci pour le conseil, je ne travaille plus sur ce problème mais votre réponse sera utile aux personnes lisant ce fil. Sur leur site web, il semble y avoir un support Linux/BSD/OS X pour Plastic SCM puisqu'il s'agit de C#/Mono. Ils utilisent le SQL pour le stockage backend, cependant, je suis toujours sceptique sur le support/la performance du "gros fichier" ... par lequel je pensais à l'origine à, disons, les sources vidéo DV dans la gamme 1-10 G. Le découpage/différencier quelque chose comme ça de SQLite * peut fonctionner, mais comment? Si quelqu'un a une expérience avec cela, ce serait une bonne information à ajouter. – joelhardi

+0

Salut, en fait, nous faisons un autre test avec des fichiers 2Gb ... il s'agit de stocker des blobs 4mb sur une base de données, ce qui est ... extrêmement rapide ... en utilisant SQL Server, Firebird ou même MySQL ... une option pour enregistrer des fichiers sur fs aussi. – pablo

3

BUP peut être ce que vous cherchez. Il a été construit comme une extension de la fonctionnalité git pour faire des sauvegardes, mais c'est effectivement la même chose. Il divise les fichiers en morceaux et utilise un hachage dynamique pour rendre le contenu du fichier adressable/faire un stockage efficace.

0

Je suis venu à la conclusion que la meilleure solution dans ce cas serait d'utiliser ZFS.

Oui ZFS est pas un DVCS mais:

  • Vous pouvez allouer de l'espace pour référentiel via la création de nouvelles FS
  • Vous pouvez suivre les changements en créant des instantanés
  • Vous pouvez envoyer des instantanés (engage) à un autre Ensemble de données ZFS
Questions connexes