TFS: Zusammenführung in den Hauptzweig
Haben wir eine Current-Zweig, wo die Haupt-Entwicklung passiert. Für eine Weile habe ich an etwas gearbeitet, Art der experimentellen in einem separaten Zweig. In anderen Worten, ich verzweigte, was ich brauchte aus dem Current-Zweig in einen Experimentellen Zweig. Während der Arbeit habe ich regelmäßig zusammengeführt Strom in das Experimentelle, so dass ich die änderungen, die andere gemacht haben, so dass ich mir sicher bin was ich machen die Arbeit mit Ihren änderungen.
Möchte ich nun Zusammenführen, wieder zurück in Strom. Zuerst habe ich zusammengeführt Strom in Experimentellen, zusammengestellt und sorgte dafür, dass alles funktioniert. Also in meinem Kopf, Experimentelle und Aktuelle werden sollte, "in sync". Aber wenn ich versuche, Sie zu verschmelzen Experimentelle zurück in die Aktuelle, bekomme ich eine ganze Reihe von Konflikten. Aber ich dachte, ich hätte bereits eine Art gelöst, die, als ich zusammengeführt Strom in das Experimentelle.
Was ist Los? Habe ich Total was falsch verstanden? Wie kann ich dies reibungslos? Wirklich nicht wollen, zu gehen durch alle diese Konflikte...
InformationsquelleAutor der Frage Svish | 2009-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie klicken Sie auf Lösen, auf einen einzelnen Konflikt, was macht die zusammenfassende Meldung sagen? Wenn Ihr fusioniert aus Aktuellen -> Experimentelle abgeschlossen wurden, ohne großen manuellen arbeiten, es sollte etwas sein wie "X-source -, 0 Ziel -, Y, 0 in Konflikt." In anderen Worten, es gibt keine content-Blöcke in den Ziel - (Strom) - Datei, die nicht bereits in den source-Zweig kopieren (Experimentell). Sie können sicher verwenden die AutoMerge Schaltfläche Alle.
Hinweis: AutoMerge sollte werden sicher egal. Es ist optimiert, um konservativ zu sein über die frühen Warnungen, nicht die Fähigkeit zum lösen jeden Fall. Aber ich erkenne, dass viele von uns-mich eingeschlossen-wie Feuer bis das merge-tool, wenn es irgendeine Frage. In dem Szenario beschrieben, IMO, sogar die scheu einfach ausruhen können.
Warum gibt es einen Konflikt? Und was ist, wenn die zusammenfassende Meldung nicht so geschnitten und trocken ist? Gute Frage 🙂 Kurze Antwort - weil die Berechnung bestimmt, dass die gemeinsamen Vorfahren ("Basis") des zugehörigen Dateien hängt stark auf, wie vor merge-Konflikte zwischen Ihnen gelöst wurden. Einfaches Beispiel:
TFS müssen Flagge diese Abfolge der Ereignisse, die als Konflikt. Die nächsten gemeinsamen Vorfahren zwischen B\foo.cs;4 und A\foo.cs;2 liegt den ganzen Weg zurück zu Schritt 1, und beide Seiten haben sich offensichtlich verändert.
Es ist verlockend zu sagen, dass A und B synchron sind nach Schritt 4. (Genauer: dass der gemeinsame Vorfahre für Schritt 5 merge ist version #2). Sicherlich eine erfolgreiche content Zusammenführen impliziert, dass B\foo.cs enthält alle änderungen bis zu diesem Zeitpunkt? Leider gibt es eine Reihe von Gründen, die Sie nicht annehmen können:
Allgemeingültigkeit: nicht alle Konflikte können AutoMerged. Sie müssen die Kriterien, die gelten für beide Szenarien.
Korrektheit: auch wenn AutoMerge erfolgreich ist, muss es nicht immer der Erstellung Gültiger code. Ein klassisches Beispiel entsteht, wenn zwei Menschen die gleichen Feld, um die verschiedenen Teile der definition einer Klasse.
Flexibilität: jede Quelle, die Kontrolle Benutzer hat seine eigenen Lieblings-merge-tools. Und Sie brauchen die Fähigkeit zur weiter-Entwicklung/- Test zwischen anfangs-Beheben Entscheidung ["Zusammenführen müssen die Inhalte irgendwie, irgendwann"] und der Letzte Check-in ["hier, diese Werke"].
Architektur: in einem zentralisierten system wie TFS, der server kann einfach nicht Vertrauen, nichts, aber seine eigene Datenbank + die API ist die Validierung der Anforderungen. So lange, wie der Eingang entspricht spec, der server sollte nicht versuchen, zu unterscheiden wie verschiedenen Arten von Inhalten verschmilzt durchgeführt wurden. (Wenn Sie denken, dass die Szenarien so weit sind leicht zu unterscheiden, betrachten: was, wenn die AutoMerge-engine hat einen Fehler? Was ist, wenn ein rogue client ruft die webservice direkt mit beliebigen Datei-Inhalt? Nur an der Oberfläche kratzen hier...Server haben, skeptisch zu sein, für einen Grund!) Alle es kann sicher berechnen, ist Sie schickte mir eine erzeugte Datei, die nicht mit der Quell-oder Ziel -.
Setzt man diese Anforderungen zusammen, Sie am Ende mit einem design, Klumpen unsere Aktionen in Schritt 4 in eine ziemlich Breite Kategorie, in der auch manuelle Zusammenführungen, die sich aus überlappenden bearbeitet, der Inhalt verschmilzt [auto oder nicht] von 3rd-party-tools und Dateien von hand bearbeitet und nach der Tat. In TFS-Terminologie ist dies ein AcceptMerge Auflösung. Einmal aufgenommen als solche, die Regeln der Merge(tm) davon ausgehen, dass das Schlimmste in der Verfolgung der historischen Integrität und die Sicherheit der zukünftigen Operationen. In den Prozess Ihrer semantischen Absichten für Schritt 4 ("voll integrieren, in B jede änderung, die gemacht wurde, um Ein in #2") wurden verdummt, um ein paar bytes von der reinen Logik ("geben Sie B den folgenden neuen Inhalt + Gutschrift für das handling #2"). Während die unglücklichen, es ist "nur" ein UX /education problem. Menschen bekommen viel wütender werden, wenn die Regeln der Zusammenführung machen schlechte Annahmen, die dazu führen, gebrochen code-und Daten-Verlust. Hingegen, alles, was Sie tun müssen, ist auf eine Schaltfläche klicken.
FWIW, es gibt viele andere enden zu dieser Geschichte. Wenn Sie gewählt haben, Kopieren Von Quell-Branch [aka AcceptTheirs] in Schritt 4, gäbe es keinen Konflikt in Schritt 5. Dito, wenn Sie wählte einen AcceptMerge Auflösung, aber passiert ist zu verpflichten, eine Datei mit dem gleichen MD5-hash als\foo.cs;2. Wenn Sie gewählt haben, Halten, Ziel, [aka AcceptYours] statt, die Konsequenzen ändert sich noch wieder, aber ich kann mich nicht erinnern, die details. Alle der oben genannten ziemlich Komplex, wenn Sie anderen changetypes (besonders Umbenennen), Zweige Zusammenführen, die weit mehr out-of-sync als in meinem Beispiel, cherry pick bestimmte version reicht und sich mit den Waisen später, usw....
EDIT: wie das Schicksal es wollte, jemand anderes gerade gefragt, die genau die gleiche Frage auf der MSDN-forum. Wie neigt dazu, meine Natur, ich schrieb Ihnen noch eine lange Antwort, die kam ganz anders! (obwohl offensichtlich berühren, auf dem gleichen Schlüssel Punkte) Hoffe, das hilft: http://social.msdn.microsoft.com/Forums/en-US/tfsversioncontrol/thread/e567b8ed-fc66-4b2b-a330-7c7d3a93cf1a
InformationsquelleAutor der Antwort Richard Berg
Dies geschah zu mir vor. Wenn TFS führt in Aktuelle Experimentelle, die es nicht so mit den Arbeitsbereichen auf Ihrer Festplatte. Wenn Ihr Aktueller Arbeitsbereich ist die out-of-date auf Ihrem lokalen computer, TFS erhalten merge-Konflikten.
Versuchen erzwungenen Holen Sie sich die Aktuellen zu aktualisieren Sie Ihre lokalen coppy von Aktuellen und versuchen Sie den Abgleich erneut.
InformationsquelleAutor der Antwort Ryan Michela
Vermutlich haben Sie Zeilen wie diese, bevor Sie Sie Zusammenführen...
Wenn man Druck von den Derzeitigen zu den Exp, die du Zusammenführen-Funktion E in den experimentellen Zweig.
Wenn Sie dann push von Exp auf die Aktuellen, haben Sie immer noch Zusammenführen, F, G und H. Dies ist, wo Ihre Konflikte sind wahrscheinlich verwurzelt.
- - - - - Antwort zum 1. Kommentar----
Tun Sie das automatische zusammenlegen, oder verwenden Sie das merge-tool?
Was ist ein Beispiel für etwas, das ist "in conflict"?
InformationsquelleAutor der Antwort StingyJack