5

Ich kann GIT nicht für TFS richtig arbeiten in Visual Studio im Umgang mit Zusammenführungen. Grundsätzlich sind alle Merge-Operationen, die beim Ziehen der letzten Version des Codes auftreten, ein Albtraum.Wie man ordnungsgemäß mit Zusammenführungen bei einem GIT PULL in Visual Studio umgehen kann

Ich spreche speziell über Verschmelzungen, die auftreten, wenn jemand anderes Code aus dem gleichen Zweig ziehen (das heißt ich bin nicht über Szenarien sprechen mehrere Zweige beteiligt).

Ich bin auch über die eingebaute in GIT-Plugin von Visual Studio, so wenden Sie sich bitte Befehlszeile ausführen lassen nicht speziell sprechen Befehle, die ich kenne (wie Fütterungsmaterial), wenn es eine andere Lösung ist aus innerhalb der IDE ("Sie können nicht" wäre aber eine gültige Antwort).

Hier ist, wie das Problem zu reproduzieren:

  • gibt es zwei Entwickler, A und B, auf der gleichen Branche arbeiten
  • Entwickler A schiebt einige begehen, dass Dateien F1 und F2
  • Entwickler B modifiziert Ändert Dateien F1 und F3
  • Entwickler B schreibt Änderungen an F1 und F3
  • Entwickler B zieht: Visual Studio erkennt einen Konflikt in Datei F1 (was erwartet wird)
  • Entwickler B löst den Konflikt auf F1

Jetzt ist hier die Frage: alle Dateien F1, F2 und F3 sind in der Warum Zustand für B. geändert? Entwickler B hat nur die Dateien F1 und F3 geändert. Ich sehe keinen gültigen Grund für F2 in geändert Zustand zu sein, weil B es nicht geändert hat.

Ich verstehe, dass lokal die F2-Datei ist nicht das gleiche wie vor dem ziehen, aber das Problem ist, dass B im Grunde nicht seine Änderungen auf F1 und F3 vor dem Drücken, weil alle anderen arbeiten (in der vereinfachten Fall oben, auf F2) erscheint auch in seiner Änderungsliste.

In unseren realen Szenarien gibt es mehr Entwickler auf der gleiche Branche arbeiten, und jedes verschmelzen ist ein großer Ausfall in der Branche Geschichte: Visual Studio zeigt im Grunde ein Bündel von 50-oder-so geändertenen Dateien für jeden Zusammenführen (wenn der Entwickler nur 1 oder 2 Dateien geändert hat).

Dieses Problem immer tritt mit einer up-to-date klug genug, um Visual Studio 2013 Visual Studio 2015 scheint zeigen F2 nicht so modifiziert, aber nicht immer.

Wie behebt man dieses Verhalten? Derzeit ist GIT eine PITA, die in Visual Studio verwendet wird.


EDIT:

Hier ist ein visuelles Beispiel.Auf der linken Seite, die Geschichte, wie in VS 2013 gezeigt: viele modifizierte Dateien. Auf der rechten Seite die gleiche Geschichte (dasselbe Repository, dieselbe Maschine, dasselbe commit ... etc.) Wie in VS 2015 gezeigt. Offensichtlich zeigt VS 2015 etwas anderes und etwas besser (ich sehe nur meine Änderungen). Beachten Sie, dass dies nicht immer funktioniert auf diese Weise, manchmal VS 2015 zeigt Dateien, die ich nicht geändert habe, genau wie VS 2013 tut.

Diese Frage war zu diesem Verhalten, wenn Ich bin über das Ergebnis einer Zusammenführung schieben, aber es ist genau das gleiche, wenn ich einfach die Geschichte eines alten merge zu sehen, wie unten dargestellt:

enter image description here

Die Fragen sind:

  • ist das ein Fehler?
  • wenn nicht, ist dies dokumentiert?
  • Wie soll ich auf jeden Fall mit GIT arbeiten, vor allem mit VS 2013, in Bezug auf die Inkonsistenz wie oben gezeigt?
+0

Also Entwickler B hat F1 und F3 geändert, aber nicht auf den Remote-Zweig geschoben, richtig? – TriskalJM

+0

@TriskalJM Ja das ist es – ken2k

+0

Im Allgemeinen betrachten Sie nicht eine nicht festgeschriebene Zusammenführung, um zu versuchen, festzustellen, wie zwei Zweige sich unterscheiden. Normalerweise würden Sie die Verzweigung mit der Upstream-Verzweigung vergleichen, nachdem Sie die Zusammenführung abgeschlossen und festgeschrieben haben. https://git-scm.com/book/en/v2 und http://www.gitforvisualstudio.com/ können helfen, einige dieser Konzepte zu erläutern. –

Antwort

2

Sie müssen nur verstehen, wie git funktioniert.

Wenn Sie sagen:

Entwickler B hat einen Pull: Visual Studio einen Konflikt auf Datei F1 erkennt

(von der erwartet wird) Das ist, wo Sie falsch. Git erkennt Konflikte und kann daher die Zusammenführung nicht durchführen. (Selbst wenn Sie aus dem "gleichen" Zweig zusammenführen, was git tut, ist ein Merge-Commit zu erstellen, um diese auch zu verbinden).

Wenn dies passiert, zeigt Git Ihnen alle Unterschiede, die von beiden Zweigen verursacht werden. Sie können git hinzufügen (oder was auch immer es heißt im Visual Studio) alle Dateien ohne Konflikt, sie werden Teil der "Merge-Commit" sein.

Die einzige Sache, die Sie tun müssen, ist, die Konflikte zu beheben, wo sie markiert sind, und lassen Sie den Rest, aber wie es ist, und erstellen Sie das Zusammenführungsfestschreiben.

Um zusammenfassen, wenn eine Zusammenführung fehlschlägt, erhalten Sie beide ändert und Konflikte zu sehen. Konzentrieren Sie sich nur auf die Konflikte zu beheben und lassen Sie die regulären Änderungen werden, wie sie sind.

+0

Meine Frage war wahrscheinlich nicht klar. Ich verstehe, dass Entwickler B die Konflikte beheben muss, bevor es zusammengeführt werden kann. Der Zusammenführungsprozess selbst ist für mich kein Problem. Das eigentliche Problem bezieht sich speziell auf das _changes_-Fenster von Visual Studio (sowie auf das _History_-Fenster), das beide durch B modifizierten Dateien anzeigt (entweder durch Korrektur eines Konflikts (F1) oder anderer Dateien (F3)) Entwickler (F1). – ken2k

+0

@ ken2k gut, yeah, _changes_ in git Begriffe würde F2 von anderen Entwickler im Team geändert werden. – TriskalJM

+0

@TriskalJM Okay, aber warum werden diese Änderungen (von jemand anderem gemacht) im Fenster "Included Changes" von Entwickler B angezeigt? Entwickler B kann seine eigenen Änderungen nicht überprüfen, bevor er das Ergebnis der Zusammenführung pusht, da er nicht in der Lage ist zu unterscheiden, was er tatsächlich modifiziert hat, was andere Leute geändert haben. – ken2k

0

Ich habe Visual Studio 2013 mit Git & verwendet, es funktioniert perfekt für das oben erwähnte Szenario.

Was ich vorschlagen könnte, ist zu überprüfen, ob es einen Unterschied in den Benutzereinstellungen dieser Entwickler gibt. Jede Änderung in Zeilenenden, Tabulator Leerzeichen oder Verwenden von Strg + K + F (Formatierungsverknüpfung) kann ein Problem sein.

Was ich vorschlagen, um jedes benutzerdefinierte Plugin, Tool native VS-Unterstützung zu deinstallieren, Update Visual Studio auf den neuesten Patch.

Wenn weiterhin Probleme auftreten, versuchen Sie, die gleichen Benutzereinstellungen für alle Entwickler in Visual Studio zu importieren.Siehe: How to: Share Settings Between Computers or Visual Studio Versions

Werkzeuge => Import & Export-Einstellungen .. =>

enter image description here

Next => enter image description here

Export dieser Einstellung & Import für alle anderen Benutzer, so dass alle Benutzer die gleichen Einstellungen haben.

Verschiedene Plugins wie Git Extensions, Tortoise Git oder andere benutzerdefinierte Git-Erweiterung kann mit Zeilenenden oder Standard-Tab-Leerzeichen, die Änderungen in fast allen geänderten Dateien von jedem Entwickler festgestellt werden.

+0

Das in der Frage beschriebene Verhalten trat bei einem frisch installierten aktuellen VS 2013 auf. – ken2k

+0

Dann werde ich vorschlagen, sicherzustellen, dass kein anderes Plugin für Git installiert ist und dieselben VS-Einstellungen für alle Entwickler verwenden. –

Verwandte Themen