9 votes

Fusion des notes git lorsqu'elles contiennent des conflits de fusion

J'ai fait ce qui suit pour fusionner les notes Git.
réf : http://vmiklos.hu/blog/git-notes-merge

J'ai cloné un repo, ajouté la référence des notes au commit (refs/notes/commits). Quand je le pousse, le repo central le rejette car il n'est pas rapide - parce qu'il y avait déjà un refs/notes/commits pour cet objet commit. Donc, afin de fusionner cette référence Notes distante avec ma référence Notes locale,

  1. git checkout refs/notes/master

  2. git fetch refs/notes/commits

  3. git merge FETCH_HEAD
    Auto-merging 206155715a78c9d91d42cda1de98449d2e0b1d36
    CONFLIT (ajouter/additionner) : Fusionner le conflit dans 206155715a78c9d91d42cda1de98449d........
    La fusion automatique a échoué ; corrigez les conflits et livrez ensuite le résultat.

  4. vi 206155715a78c9d91d42cda1de98449d........ [Réglez le conflit manuellement comme d'habitude]

  5. git add 206155715a78c9d91d42cda1de98449d........

  6. git commit -m "Notes mises à jour"
    [detached HEAD 0afb80f] a modifié les notes

  7. git update-ref refs/notes/commits HEAD

  8. git checkout master
    La position précédente de HEAD était 0afb80f... notes modifiées
    Passage à la branche 'master

  9. git push origin refs/notes/commits
    succès

La question est de savoir si c'est la meilleure façon de procéder.

En suivant la page de manuel de git notes, j'ai essayé ce qui suit.

  1. git fetch refs/notes/commits

  2. git notes merge -v refs/notes/commits
    Rien à mettre à jour !

Les étapes ci-dessus n'ont évidemment pas fonctionné pour moi. Existe-t-il un moyen d'utiliser la commande git notes merge et de fusionner les notes, plutôt que la "méthode des branches" comme indiqué dans la première illustration ? Pour mes utilisateurs, cette commande simple serait plus utile.

9voto

Adam Spiers Points 4193

Comme j'y ai déjà fait allusion dans un commentaire, l'une des raisons pour lesquelles la première approche ne fonctionne pas pour vous est que vous avez mal copié les instructions : votre deuxième étape git fetch refs/notes/commits Il manque le nom de la télécommande.

En ce qui concerne la deuxième approche avec git notes merge Encore une fois, vous avez fait la même erreur en omettant la télécommande de l'appareil. git fetch . Mais même avec ce problème résolu, j'ai eu du mal à le faire fonctionner jusqu'à ce que je comprenne finalement qu'il faut récupérer les notes de l'espace distant dans un espace de nom de référence différent avant de fusionner, car s'il y a un conflit, il ne vous laissera pas écraser ce que l'espace de nom de référence local contient. refs/notes/commits (bien qu'il soit heureux de l'avancer rapidement s'il n'y a pas de conflit).

Donc ça marche pour moi :

git fetch origin refs/notes/commits:refs/notes/origin/commits
git notes merge -v origin/commits

S'il y a des conflits, il vous dira maintenant de modifier .git/NOTES_MERGE_WORKTREE et ensuite valider le résultat via git notes merge --commit ou interrompre la fusion avec git notes merge --abort .

Un gros inconvénient de l'utilisation git notes merge sur la technique suggérée dans l'URL ci-dessus est que la fusion ne fournit pas d'index, de sorte que vous ne pouvez pas utiliser votre flux de travail normal de fusion par l'intermédiaire de git mergetool etc. Un autre problème est qu'il ne supporte pas le rebasage. Donc, si vous vous attendez à des conflits compliqués ou si vous avez besoin de rebaser, je vous recommande d'opter pour l'option git checkout refs/notes/commits approche. Mais dans le cas simple, git notes merge est probablement plus pratique car vous pouvez effectuer la fusion alors que votre arbre de travail est sale, alors que git checkout refs/notes/commits exige qu'il soit propre.

Je suis presque sûr que le git-notes(1) La page de manuel pourrait rendre tout cela beaucoup plus évident. Je trouverai peut-être le temps de soumettre un patch pour cela. En attendant, j'ai écrit une nouvelle version de appelé git-rnotes qui facilite le partage de notes vers et depuis des référentiels distants.

2voto

VonC Points 414372

Remarque : git 2.6 (Q3/Q4 2015) rendra git notes merge un peu plus efficace et précis :

Véase commettre 4f655e2 , commettre d2d68d9 , commettre 11dd2b2 , commettre 93efcad , commettre 4d03dd1 , commettre e48ad1b (17 août 2015) par Jacob Keller ( jacob-keller ) .
(fusionné par Junio C Hamano -- gitster -- en commettre 5b6211a , 31 août 2015)

notes Enseignements git notes à propos de notes.<name>.mergeStrategy option

Enseigner notes à propos d'un nouveau " notes.<name>.mergeStrategy Option " pour configurer la stratégie de fusion des notes lors de la fusion dans le système de gestion de l'information. refs/notes/<name> .
Cette option permet de sélectionner la stratégie de fusion pour des références de notes particulières, plutôt que pour toutes les fusions de références de notes, car l'utilisateur peut ne pas souhaiter que la stratégie de fusion soit utilisée. cat_sort_uniq pour tous les arbitres, mais seulement certains.
Notez que le <name> est la référence locale dans laquelle nous fusionnons, et non la référence distante à partir de laquelle nous avons fusionné. L'hypothèse est que les utilisateurs voudront le plus souvent configurer des stratégies de fusion de référence locale distinctes plutôt que des stratégies en fonction de la référence distante à partir de laquelle ils fusionnent.

notes.<name>.mergeStrategy remplace le comportement général car il est plus spécifique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X