Je vais essayer de rester bref.Comment puis-je fusionner des changements d'une branche qui contient un sous-ensemble de répertoires d'un autre?
Nous avons un référentiel git qui agit comme un miroir SVN (géré par BitBucket). Ce dépôt contient chaque projet dans la société depuis le début des temps et ayant chaque clone de développeur ce n'est pas une demande raisonnable (25 + 33GiB full clone et 15 + GiB shallow) Mais même alors, nous n'avons pas besoin d'un clone complet de l'ensemble du dépôt, juste un sous-ensemble des répertoires à l'intérieur. En utilisant git-subtree, j'ai réussi à séparer tous les répertoires d'intérêt et j'ai pensé que nous pourrions ajouter ces répertoires dans nos dépôts locaux en utilisant git-subtree add. Ce processus est transparent pour le dépôt svn. Cela fonctionne bien et la taille est beaucoup plus gérable (clone complet 9 + 6GiB et 8GiB peu profond). Le problème est que je ne sais pas comment nous pourrions prendre les changements que nous faisons dans ces "clones partiels" et les fusionner dans la branche principale. Je pensais que nous serions en mesure d'utiliser les demandes de tirage habituelles pour les entrer mais comme les arbres des branches sont différents, il ne se comporte pas comme je le voudrais (les répertoires manquants sont traités comme déménagements). Je veux juste fusionner les changements des répertoires clonés et laisser les autres intacts.
Je ne pense pas que l'utilisation d'une caisse clairsemée aiderait ici puisque nous aurions encore à cloner le repo complet pour le faire fonctionner ce qui est exactement ce que j'essaie d'éviter.
Y at-il une combinaison de commandes que je peux utiliser pour que tout cela fonctionne?
est ici (modifié) scripts que j'ai utilisé pour diviser les répertoires et à la caisse les répertoires d'intérêt:
split_projects.sh
je git-sous-arbre de diviser et de rejoindre les répertoires et git utilisés -réplace pour améliorer la vitesse de resplissage (pour traiter uniquement les nouveaux commits). Notez que le rejoin est pas commis au dépôt principal (je ne suis pas disposé à commettre cela surtout avec le miroir svn).
initial_setup.sh
Ceci est le script pour préparer le dépôt local. A utiliser par les utilisateurs de Windows, dont beaucoup n'ont pas beaucoup d'expérience avec les outils git ou en ligne de commande.
checkout_projects.sh
Le script de paiement actuel.
Il y en a une autre qui extrait les mises à jour des sous-répertoires séparés, mais je ne l'inclue pas ici.
Qu'est-ce qui ne va pas avec les options subtree lors de la fusion? – jthill
Je crois comprendre que l'utilisation de cette stratégie fusionne les branches où l'une est entièrement contenue dans l'autre. c'est-à-dire que la branche A est déjà une sous-arborescence de la branche B. Dans ma situation, la branche A contient un sous-ensemble des répertoires de la branche B et ne fonctionnerait pas. –
Vous devrez peut-être joindre la liste de diffusion ([email protected]) pour obtenir de l'aide. Mon instinct, cependant, est qu'il n'y a peut-être pas de solution, puisque vous cherchez à appliquer les changements faits dans les sous-arbres au dépôt racine, et je ne peux pas imaginer comment cela serait possible sans informations sur les commits dans le root repo. Si vos développeurs utilisent Windows, le projet GVFS récemment ouvert peut être ce que vous cherchez. – Pockets