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,
- git checkout refs / notes / master
- git fetch refs / notes / commits
- 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.
- vi 206155715a78c9d91d42cda1de98449d ........ [den Konflikt wie gewöhnlich manuell beheben]
- git add 206155715a78c9d91d42cda1de98449d ........
- git commit -m "aktualisierte Notizen"
[detached HEAD 0afb80f] hat die Notizen geändert- git update-ref Referenzen / Notizen / commits HEAD
- git checkout master
Vorherige HEAD-Position war 0afb80f ... Notizen geändert Zum Zweig "Master" gewechselt- git push Herkunft refs / notes / commits
Erfolg
Die Frage ist, ob dies der beste Weg ist, dies zu tun?
Im Anschluss an Git Man Seiten, habe ich folgendes versucht.
- git fetch refs / notes / commits
- Git Notes merge -v Referenzen / Notizen / commits
Nichts zu aktualisieren!
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.
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.
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
: lehrengit notes
übernotes.<name>.mergeStrategy
optionTeach
notes
über eine neue Option "notes.<name>.mergeStrategy
" zum Konfigurieren der Notes-Merge-Strategie beim Zusammenführen inrefs/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 Benutzercat_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.
Tags und Links git