Zusammenführung von Git-Notizen, wenn darin Mischkonflikte bestehen

8

Ich habe Folgendes getan, um Git-Noten zu verschmelzen.
Ref: Ссылка

Ich habe einen Repo geklont, einen Hinweis auf das Commit hinzugefügt (refs / notes / commits). Wenn ich es drücke, lehnt das zentrale Repo es ab, da es nicht schnell vorwärts ging - weil es bereits ein refs / notes / commits für dieses Commit-Objekt gab. Um diese entfernte Notes-Referenz mit meiner lokalen Notes-Referenz zusammenzuführen,

  
  1. git checkout refs / notes / master
  2.   
  3. git fetch refs / notes / commits
  4.   
  5. git merge FETCH_HEAD
      Auto-Merging 206155715a78c9d91d42cda1de98449d2e0b1d36
      CONFLICT (add / add): Zusammenführungskonflikt in 206155715a78c9d91d42cda1de98449d ........
      Automatische Zusammenführung fehlgeschlagen; Konflikte lösen und dann das Ergebnis festschreiben.
  6.   
  7. vi 206155715a78c9d91d42cda1de98449d ........ [den Konflikt wie gewöhnlich manuell beheben]
  8.   
  9. git add 206155715a78c9d91d42cda1de98449d ........
  10.   
  11. git commit -m "aktualisierte Notizen"
      [detached HEAD 0afb80f] hat die Notizen geändert
  12.   
  13. git update-ref Referenzen / Notizen / commits HEAD
  14.   
  15. git checkout master
      Vorherige HEAD-Position war 0afb80f ... Notizen geändert   Zum Zweig "Master" gewechselt
  16.   
  17. git push Herkunft refs / notes / commits
      Erfolg
  18.   

Die Frage ist, ob dies der beste Weg ist, dies zu tun?

Im Anschluss an Git Man Seiten, habe ich folgendes versucht.

  
  1. git fetch refs / notes / commits
  2.   
  3. Git Notes merge -v Referenzen / Notizen / commits
      Nichts zu aktualisieren!
  4.   

Die obigen Schritte funktionieren offensichtlich für mich. Gibt es eine Möglichkeit, den Befehl "git notes merge" zu verwenden und die Notes zusammenzufassen, anstatt die "Verzweigungsmethode" wie in der ersten Abbildung dargestellt zu verwenden? Für meine Benutzer wäre dieser einfache Befehl hilfreicher.

    
maxmelbin 21.08.2012, 12:54
quelle

2 Antworten

6

Wie ich bereits in einem Kommentar angedeutet habe, ist der erste Ansatz, der für Sie nicht funktioniert, dass Sie die Anweisungen falsch kopiert haben: Ihrem zweiten Schritt git fetch refs/notes/commits fehlt der Name der Fernbedienung.

In Bezug auf den zweiten Ansatz mit git notes merge haben Sie wieder den gleichen Fehler gemacht, dass Sie den Remote von git fetch verpasst haben. Aber selbst mit diesem Problem hatte ich Mühe, es zum Laufen zu bringen, bis ich schließlich herausfand, dass man die Notizen von der Fernbedienung in einen anderen ref-Namespace holen muss, bevor es verschmelzt, denn wenn es einen Konflikt gibt, kann man es nicht überschreiben das lokale refs/notes/commits zeigt auf (obwohl es glücklich vorspulen wird, wenn es keinen Konflikt gibt).

Das funktioniert also für mich:

%Vor%

Wenn es Konflikte gibt, werden Sie jetzt aufgefordert, .git/NOTES_MERGE_WORKTREE zu bearbeiten und dann das Ergebnis über git notes merge --commit zu committen oder die Zusammenführung mit git notes merge --abort abzubrechen.

Ein großer Nachteil der Verwendung von git notes merge gegenüber ist die Technik, die in der obigen URL vorgeschlagen wird , dass die Zusammenführung funktioniert Stellen Sie keinen Index zur Verfügung, so dass Sie Ihren normalen Zusammenführungsworkflow nicht über git mergetool usw. verwenden können. Ein anderer ist, dass er das Rebasing nicht unterstützt. Wenn Sie also komplizierte Konflikte erwarten oder neu erstellen müssen, empfehle ich Ihnen den Ansatz git checkout refs/notes/commits . Aber im einfachen Fall ist git notes merge wahrscheinlich bequemer, weil Sie die Zusammenführung durchführen können, während Ihr Arbeitsbaum schmutzig ist, während git checkout refs/notes/commits erfordert, dass sie sauber ist.

Ich bin mir ziemlich sicher, dass die git-notes(1) man-Seite das alles viel offensichtlicher machen könnte. Vielleicht werde ich etwas Zeit finden, einen Patch dafür einzureichen. In der Zwischenzeit habe ich jedoch einen neuen Wrapper namens git-rnotes Dies erleichtert das Teilen von Notizen zu und von Remote-Repositories.

    
Adam Spiers 28.04.2013, 23:56
quelle
2

Hinweis: git 2.6 (Q3 / Q4 2015) macht git notes merge ein bisschen effizienter und präziser:

Siehe commit 4f655e2 , commit d2d68d9 , commit 11dd2b2 , commit 93efcad , commit 4d03dd1 , < a href="https://github.com/git/comitt/e48ad1b9b1d862dd0aad3a21c7e6ca5ec68c024c"> committe e48ad1b (17. August 2015) von Jacob Keller ( jacob-keller ) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in commit 5b6211a , 31. August 2015)

  

notes : lehren git notes über notes.<name>.mergeStrategy option

     

Teach notes über eine neue Option " notes.<name>.mergeStrategy " zum Konfigurieren der Notes-Merge-Strategie beim Zusammenführen in refs/notes/<name> .
  Diese Option ermöglicht die Auswahl der Zusammenführungsstrategie für bestimmte Notes-Refs und nicht für alle Notes Ref Merges, da der Benutzer cat_sort_uniq nicht für alle Refs, sondern nur für einige verwenden möchte.
  Beachten Sie, dass <name> die lokale Referenz ist, in die wir uns einfügen, nicht die entfernte Referenz, aus der wir uns zusammengeschlossen haben. Die Annahme ist, dass die Benutzer das meiste wollen   Konfigurieren Sie separate lokale Refe-Merge-Strategien statt Strategien   abhängig davon, aus welcher Remote-Referenz sie stammen.

     

notes.<name>.mergeStrategy überschreibt das allgemeine Verhalten, da es mehr ist   spezifisch.

    
VonC 01.09.2015 09:07
quelle

Tags und Links