Git confus lors de la fusion d'une mise à jour dans mon sous-arbre
-
19-09-2019 - |
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?
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:
-
Fusionner les fichiers que vous avez ci-dessus.
-
déplacer manuellement tous les fichiers résultants là où ils devraient ont disparu.
-
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