git-sous-arborescence de tirer des complications
Nous avons essayé d'obtenir git-sous-arborescence de travail sur un projet (avec git version 1.7.9.4) et ont eu un peu de complication. Quelqu'un d'autre précédent, a ajouté le sous-arbre avec cette commande il y a quelques mois:
git subtree add --prefix=foo [email protected]:foo.git master
Maintenant, il y a eu des changements de fond à foo
et nous tenons à fusionner ces changements, idéalement à l'écraser. Aucun fichier n'a été modifié depuis qu'ils ont été importés.
J'ai essayé trois choses pour essayer de fusionner les modifications.
Première:
git subtree pull --squash -P foo [email protected]:foo.git master
Qui lève l'exception: Can't squash-merge: 'foo' was never added.
Deuxième:
git subtree pull -P foo [email protected]:foo.git master
Cela fonctionne (un peu), mais a la question de tirer dans tous les commits et a des conflits avec les fichiers qui ont été modifiés.
Enfin, j'ai essayé ceci:
git pull --squash -s subtree [email protected]:foo.git master
Cela me donne le résultat souhaité, avec la sortie Automatic merge went well; stopped before committing as requested
et de tous les dossiers montrant tel que modifié (avec le bon contenu).
Idéalement, j'aimerais continuer à utiliser la première git-subtree
version et obtenir un résultat proche de la dernière version. Si nous devons utiliser la dernière version de constamment aller de l'avant, nous le ferons, mais je suis un peu confus quant à pourquoi le dernier ne produit pas de conflits de fusion alors que celui du milieu n'.
Toute aide est appréciée.
OriginalL'auteur David H. Clements | 2012-03-19
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème, et dans mon cas, il semble être en raison de la première sous-arborescence de s'engager en cours de fusion-écrasé dans la branche master.
À la recherche par le biais de la sous-arborescence source, j'ai trouvé ceci: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L224
Il ressemble à de la sous-arborescence grep votre commande git log pour
git-subtree-dir: foo
mais ne pas trouver un commit. Essayezgit log --grep="git-subtree-dir: foo/*\$"
, et si il y a quelque chose de bizarre avec qui s'engagent, comme étant une fusion de commettre, qui pourrait être le problème.Vient de tirer sans écraser fonctionné pour moi, en dehors de l'ennuyeux conflits de fusion. Je n'ai qu'une mesure temporaire de la branche, que j'ai ensuite
git merge --squash
ed dans une autre branche pour éviter un nouvel ordre de l'histoire. Il pourrait avoir été relocalisée au lieu de cela aussi, bien sûr.Merci, c'est utile. J'ai eu un problème connexe, où j'ai déplacé le subdir après l'ajout de la sous-arborescence dans, ce qui semble pour le voyage jusqu'à ce match
OriginalL'auteur Jacob R
J'ai connu la même erreur
Can't squash-merge: 'foo' was never added.
avec sourcetree 1.7.0 chaque fois que je fais un pull sur une sous-arborescence.Cependant, je crois que mon cas est différent parce que je suis à l'aide des sous-répertoires.
Sourcetree fait quelque chose comme suit:
git -c diff.mnemonicprefix=false -c core.quotepath=false subtree pull -P dir1\subdir1 --squash remote-repo master
Et évidemment, si nous avons été d'essayer de nouveau dans Git Bash (Git version 2.6.1.de windows.1), ce serait:
git subtree pull -P "dir1\subdir1" --squash remote-repo master
Cependant qui a échoué. Les éléments suivants ont également échoué bien que la syntaxe de la commande est très bien:
git subtree pull -P dir1/subdir1 --squash remote-repo master
La solution que j'ai trouvé est d'utiliser Git Bash avec la commande suivante:
git subtree pull -P "dir1/subdir" --squash remote-repo master
Je pense qu'il y a encore quelques travaux à faire pour Git en ligne de commande d'un moteur de traitement.
OriginalL'auteur Zaki Mohzani