Question

Nous avons utilisé précédemment plusieurs sous-modules dans nos dépôts principaux, mais d'augmenter la maintenabilité de nos projets, nous avons commencé une branche expérimentale où nous les avons remplacés tous avec les sous-arbres.

Cela a fonctionné bien -. Mais maintenant quand je suis en train de mettre à jour l'un des sous-arbres, il se confond à tort la mise à jour dans un répertoire complètement faux qui est même pas un sous-arbre

Le référentiel principal, où la branche "arborescence" contient la branche expérimentale est la suivante: git: //github.com/hugowetterberg/goodold_drupal.git

Le dépôt de fusion dans les mises à jour: git: //github.com/voxpelli/drupal-oembed.git

Fusion en faisant: -s subtree git merge oEmbed / maître

Le chemin des mises à jour doivent être fusionnées en: sites / all / modules / oEmbed /

Le chemin ils sont fusionnés en: modules / agrégateur / traductions /

Toute personne ayant une idée de la façon d'obtenir les mises à jour dans les sous-arbres ou ce que l'erreur peut être?

Était-ce utile?

La solution

Malheureusement, c'est un bug (ou fonctionnalité manquante) dans le code « de sous-arbre de fusion git ». Il en fait suppositions les sous-arbres que vous souhaitez fusionner. Habituellement, cela se magiquement être correct, mais si votre sous-arborescence contient beaucoup de changements (ou était à l'origine vide, ou autre), il peut échouer spectaculairement.

La meilleure façon de contourner le problème est:

  1. Fusionner les fichiers que vous avez ci-dessus.

  2. déplacer manuellement tous les fichiers résultants là où ils devraient ont disparu.

  3. git commit -a --amend pour corriger la fusion commit.

Future se confond probablement fonctionnent très bien, à moins que ce répertoire est constamment en quantités incroyables de flux.

La commande expérimentale « git sous-arbre » a un paramètre de --prefix qui devrait vous laisser passer outre cela, mais malheureusement, il ne fonctionne pas au moment (car il faut travailler autour des fonctions « sous-arborescence de fusion git » et il n'y a pas eu le temps de le faire).

Quoi qu'il en soit, cela devrait être une situation rare et la solution de contournement ne sera pas nécessaire, même pour les fusions futures du même projet.

Autres conseils

version 1.7.9.5 git

git pull -s subtree <remote name> <remote branch>

(fusion est entré dans le mauvais répertoire)

git reset --hard HEAD^
git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>

Notez qu'il n'y a pas de slash sur le répertoire

Merci apenwarr

scroll top