Modifier: contrairement à certaines questions similaires telles que Déplacer un référentiel SVN de plusieurs Go vers Git ou /programming/540535/managing-large-binary-files-with-git Mon scénario n'implique pas plusieurs sous-projets qui peuvent être facilement convertis en sous-carburants git, ni quelques très gros fichiers binaires qui sont bien adaptés pour git-annex. Il s'agit d'un référentiel unique où les binaires sont la suite de tests qui est étroitement couplée au code source principal de la même révision, un peu comme s'il s'agissait de ressources de temps de compilation telles que des graphiques.
J'étudie la commutation d'un ancien dépôt de code de taille moyenne / grande taille (50 utilisateurs, 60k révisions, 80Gb historique, copie de travail 2Gb) de svn. Comme le nombre d'utilisateurs a augmenté, il y a beaucoup de désabonnement dans le tronc, et les fonctionnalités sont souvent réparties sur plusieurs validations, ce qui rend la révision du code difficile à faire. De plus, sans branchement, il n'y a aucun moyen de "bloquer" le mauvais code, les révisions ne peuvent être effectuées qu'une fois qu'il est validé dans le tronc. J'examine des alternatives. J'espérais que nous pourrions passer à git, mais j'ai des problèmes.
Le problème avec le dépôt actuel en ce qui concerne git est la taille. Il y a beaucoup de vieilles cruches là-dedans, et le nettoyer avec --filter-branch lors de la conversion en git peut le réduire de l'ordre de grandeur, à environ 5-10 Go. C'est encore trop gros. La principale raison de la grande taille du référentiel est qu'il existe de nombreux documents binaires en entrée pour les tests. Ces fichiers varient entre 0,5 Mo et 30 Mo et il y en a des centaines. Ils ont également beaucoup de changements. J'ai regardé les sous-modules, git-annex, etc., mais avoir les tests dans un sous-module me semble mal, tout comme avoir l'annexe pour de nombreux fichiers pour lesquels vous voulez un historique complet.
Donc, la nature distribuée de git est vraiment ce qui m'empêche de l'adopter. Je ne me soucie pas vraiment de la distribution, je veux juste la ramification bon marché et les puissantes fonctionnalités de fusion. Comme je suppose que 99,9% des utilisateurs de git le font, nous utiliserons un référentiel central béni et nu.
Je ne suis pas sûr de comprendre pourquoi chaque utilisateur doit avoir un historique local complet lors de l'utilisation de git? Si le workflow n'est pas décentralisé, que font ces données sur les disques des utilisateurs? Je sais que dans les versions récentes de git, vous pouvez utiliser un clone peu profond avec uniquement un historique récent. Ma question est: est-il viable de le faire comme mode de fonctionnement standard pour toute une équipe? Git peut-il être configuré pour être toujours superficiel afin que vous puissiez avoir un historique complet uniquement de manière centrale, mais les utilisateurs par défaut n'ont que 1000 tours d'historique? L'option pour cela serait bien sûr de simplement convertir 1000 tours en git, et de conserver le dépôt svn pour l'archéologie. Dans ce scénario cependant, nous rencontrerions à nouveau le même problème après les plusieurs milliers de révisions suivantes des documents de test.
- Qu'est - ce qu'un bon pour l' utilisation des meilleures pratiques git avec de grandes prises en pension contenant de nombreux fichiers binaires que vous ne voulez histoire de? La plupart des meilleures pratiques et des didacticiels semblent éviter ce cas. Ils résolvent le problème de quelques énormes binaires, ou proposent de supprimer complètement les binaires.
- Le clonage superficiel est-il utilisable comme mode de fonctionnement normal ou s'agit-il d'un "hack"?
- Des sous-modules peuvent-ils être utilisés pour du code où vous avez une dépendance étroite entre la révision source principale et la révision de sous-module (comme dans les dépendances binaires au moment de la compilation ou une suite de tests unitaires)?
- Quelle est la taille «trop grand» pour un référentiel git (sur site)? Devrions-nous éviter de changer si nous pouvons le réduire à 4 Go? 2 Go?