Visual Studio 2013-Github-Commit-Deadlock

Lesezeit: 8 Minuten

Benutzer-Avatar
Walter Schulz

Ein paar Freunde und ich arbeiten an einem Projekt über GitHub. Wir teilen uns alle denselben Zweig, was eine gute Idee sein kann oder auch nicht.

Ich habe einen Teil des Codes bearbeitet und die Änderungen übernommen. Ich wollte Commit zu GitHub pushen (ich arbeite mit Visual Studio 2013 und dem integrierten Git-Tool), aber ich habe diesen Fehler erhalten:

“Es gibt neue Remote-Änderungen. Sie müssen sie ziehen, bevor Sie pushen können.”

Also habe ich versucht, die Remote-Änderungen zu ziehen, und ich bekomme diesen Fehler:

„Ein Fehler ist aufgetreten. Detaillierte Meldung: Ein Fehler wurde von libgit2 ausgelöst. Kategorie = 21 (MergeConflict). 9 nicht festgeschriebene Änderungen würden durch Zusammenführen überschrieben.“

Ich habe versucht, Zweige zu ändern, damit ich meine Änderungen übertragen und sie dann mit dem ersten Zweig zusammenführen kann, aber ich habe diesen Fehler erhalten:

“Wechseln zum Master nicht möglich, da nicht festgeschriebene Änderungen vorhanden sind. Bestätigen Sie Ihre Änderungen oder machen Sie sie rückgängig, bevor Sie die Zweige wechseln. Einzelheiten finden Sie im Ausgabefenster.”

Ich habe keine Ahnung, was ich tun soll, außer vielleicht meine Änderungen per E-Mail an einen meiner Freunde zu senden und sie meine Änderungen übertragen zu lassen. Ich weiß jedoch nicht, was mit meinen lokalen Commits passieren würde.

BEARBEITEN

Das Problem ist gelöst. Nachdem ich sichergestellt hatte, dass alle Commits synchronisiert wurden, öffnete ich git bash und zog die Remote-Commits. Nach ein paar Versuchen ging ich zurück zu Visual Studio und stellte fest, dass es die Zusammenführung registriert hatte. Ich habe alle Konfliktdateien gelöst und konnte das Projekt vorantreiben.

Danke an alle, die geantwortet haben!

  • Sie müssen alle Ihre lokalen Änderungen festschreiben, dann ziehen und dann drücken.

    – SLaks

    20. Februar 2014 um 22:58 Uhr

  • Wenn ich versuche, zu ziehen, erhalte ich diese Fehlermeldung: Ein Fehler ist aufgetreten. Detaillierte Meldung: Von libgit2 wurde ein Fehler ausgelöst. Kategorie = Os (Fehler). „C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe“ konnte nicht zum Schreiben geöffnet werden: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

    – Walter Schultz

    20. Februar 2014 um 23:05 Uhr


  • Es hört sich so an, als hättest du dich nicht wirklich verpflichtet alle Ihrer Änderungen. Mach ein git status (oder was auch immer gleichwertiges Visual Studio anbietet).

    – jdigital

    20. Februar 2014 um 23:07 Uhr


  • Ich habe alle meine Änderungen übernommen, aber ich erhalte immer noch diesen Fehler: Ein Fehler ist aufgetreten. Detaillierte Meldung: Von libgit2 wurde ein Fehler ausgelöst. Kategorie = Os (Fehler). „C:/Users/Walter/Source/Repos/JSDW_FTP_Project/FTPBoss/FTPBoss/bin/Debug/FTPBoss.vshost.exe“ konnte nicht zum Schreiben geöffnet werden: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

    – Walter Schultz

    20. Februar 2014 um 23:44 Uhr

  • @WalterSchultz: Du solltest das hinzufügen bin Verzeichnis zu .gitignore, zusammen mit einer Reihe anderer Dateien. Siehe Ignorieren-Vorlage von GitHub.

    – SLaks

    21. Februar 2014 um 1:20 Uhr

Benutzer-Avatar
David Voyles

So blöd es klingt, ich ging einfach zu dem Befehlszeileund es hat funktioniert.

  1. Git-Status
  2. Git ziehen
  3. Git-Push

alles funktionierte gut.

Wenn ich dasselbe in Visual Studio gemacht habe, hat es nicht funktioniert. Stelle dir das vor.

  • Hier gilt das gleiche! Danke dafür!

    – Mivaweb

    7. Oktober 2016 um 8:51 Uhr

  • Recht. Ich habe diese Situation oft. VS weigert sich, etwas zu tun, aber über die Konsole ist das kein Problem.

    – vtortola

    7. Dezember 2016 um 15:02 Uhr

  • Gehen Sie durch die Befehlszeile wäre ein weiterer guter Ansatz, da es funktioniert.

    – Alexz

    9. Januar 2017 um 15:28 Uhr

Benutzer-Avatar
dmquiggin

Bei Verwendung des Git-Providers von Visual Studio (GEGEN 2013, GEGEN 2015), kann diese Situation auch in Szenarien auftreten, in denen ein lokaler Commit hat durchgeführt, aber beim Versuch, vom Server zu ziehen und zusammenzuführen, die Fehlermeldung:

“Nicht festgeschriebene Änderungen würden beim Zusammenführen überschrieben”

wird weiterhin angezeigt und die Pull-Aktion wird abgebrochen.

Dies kann vorkommen, weil es lokal gibt Unverfolgte Dateien die nicht Teil des lokalen Commits waren, aber Teil des Remote-Pulls sind; die Zusammenführungsauflösung kann dieses Szenario nicht bewältigen.

Typisch dies tritt auf, wenn einige Dateien wie z. B. T4-Vorlagenausgaben in einem Commit auf einer Workstation enthalten sind, auf anderen jedoch nicht.

Zusätzlichdies kann vorkommen in Visual Studio 2015bei der Arbeit mit MVC6 Projekte (zum Zeitpunkt des Verfassens dieses Artikels), wenn Dateien im wwwroot-Ordner auf einer Arbeitsstation in ein Commit aufgenommen wurden, auf einer anderen jedoch nicht (eine mögliche Ursache dafür ist, dass die .gitignore-Dateien auf den Arbeitsstationen, die versuchen, mit der .gitignore-Datei zu arbeiten, unterschiedlich sind dasselbe Server-Repository).

Lösen:

a) Zeigen Sie den Dialog Team Explorer > Änderungen an.

b) Stellen Sie sicher, dass alle nicht nachverfolgten Dateien, die sich tatsächlich im Server-Zweig befinden, in Ihre Commits aufgenommen werden müssen; Klicken Sie dazu mit der rechten Maustaste und wählen Sie Hinzufügen. Wenn Sie beabsichtigen, sie zu überschreiben, können Sie alternativ Löschen auswählen. Bitte Vorsicht beachten.

c) Führen Sie ein Commit und dann ein Pull durch, und führen Sie alle erforderlichen Merge-Konfliktlösungen durch.

d) Führen Sie einen Push durch, um Ihr Remote-Repository zu aktualisieren.

  • Gute Antwort! Für mich lag das Problem in einer der Nuget-Paketdateien. Die lokale nicht nachverfolgte Datei wurde gelöscht und mit der aus der Pull-Anforderung aktualisiert.

    – Leigh

    28. September 2015 um 13:25 Uhr

  • Als Referenz ist meine Antwort vom 21.12.2015 noch aktuell; Ich habe dieses Verhalten mit VS 2013 und VS2015 unter Verwendung von ASP.Net MVC6 RC1 mit dem derzeit aktuellsten verfügbaren Visual Studio Git Provider überprüft.

    – dmquiggin

    21. Dezember 2015 um 21:07 Uhr


  • Ich habe die obigen Schritte ausprobiert, aber es funktioniert nicht. Ich scheine ein Fehler in der Github-Komponente in Visual Studio zu sein. Ich habe auch Git Tortoise und dadurch konnte ich meinen lokalen Zweig synchronisieren und dann pushen, nachdem die Zusammenführung zwischen Master und meinem lokalen Zweig möglich war.

    – Alexz

    9. Januar 2017 um 15:27 Uhr

Im Moment versuchen Sie im Wesentlichen, a zu tun git merge mit nicht festgeschriebenen Änderungen in Ihrem Zweig (Pull ist nur Abrufen + Zusammenführen). Git beschwert sich zu Recht, dass eine solche Operation die nicht festgeschriebenen Änderungen im Zweig überschreiben würde.

Um mit dem Pull-Vorgang fortzufahren, müssen Sie diese nicht festgeschriebenen Änderungen aus dem Arbeitsverzeichnis entfernen. Es gibt ein paar Möglichkeiten, dies zu tun

  1. Übertragen Sie sie in Ihr lokales Repository
  2. stash sie, führe den Pull-Vorgang aus und entstash sie dann auf dem Pull
  3. commit, fetch, rebase und dann zusammenführen

Wenn Sie neu bei git sind, würde ich wahrscheinlich mit Option 1 beginnen.

  • Wie übertragen Sie Ihre nicht festgeschriebenen Änderungen an das lokale Repository? Woher wissen Sie überhaupt, wo diese Änderungen sind?

    – Robert Harvey

    5. Oktober 2015 um 17:00 Uhr

  • Nicht das Problem, dies trat auch bei allen lokalen Änderungen auf. Es ist ein Visual Studio-Problem.

    – thewhiteambit

    25. September 2017 um 16:04 Uhr

Visual Studio 2013 scheint als GIT-UI noch nicht ausgereift zu sein. Ich bin auf ein ähnliches Problem gestoßen, selbst nachdem ich alle meine Änderungen lokal übernommen hatte. Für Fehler, die durch Push & Pull in Visual Studio 2013 entstehen, würde ich empfehlen, Git Bash zu verwenden, um einen Git-Pull-Befehl auszuführen. Der Befehlszeilen-Pull-Befehl ist viel leistungsfähiger als die VS-Benutzeroberfläche und löst einige Probleme.

Als Antwort auf Walter Schultz erhalten Sie den Fehler, weil Sie anscheinend versuchen, Binär- und Assemblydateien (DLL und Exe) in der Versionskontrolle zu halten. Binärdateien können nicht bearbeitet und nicht zusammengeführt werden, daher sollten sie nicht in die Versionskontrolle aufgenommen werden.

Um diese Dateien aus dem GIT-Repository auszuschließen, können Sie eine .gitignore-Datei erstellen und folgende Elemente hinzufügen:

--- begin .gitignore file ----------------
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.sln.docstates
*.cache

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
x64/
build/
bld/
[Bb]in/
[Oo]bj/
Dev/
bin/
--- end gitignore file ----------------

Sobald Sie die .gitignore-Datei erstellt haben, gehen Sie in Ihr lokales Repository und löschen Sie alle Dateien in Ihrem /Bin/-Ordner und andere Dateien, die Sie nicht verfolgen möchten.
Pushen Sie dann auf lokal und synchronisieren Sie Ihren Code mit dem Server-Repository.
Hoffe das hilft.

Mir ist dasselbe passiert, ich habe alle meine Änderungen übernommen und erhalte den gleichen Fehler, wenn ich versuche, die Zweige zu wechseln.

Mir wurde klar, dass es eine Datei gab, die ich “ignorieren” wollte und die ich unter “Ausgeschlossene Änderungen” belassen hatte. Anscheinend handhabt VS2013 diese Ausschlüsse nicht richtig.

Nach vielen Versuchen bin ich auf eine einfache Lösung gekommen:

  1. Ich habe die zu ignorierende Datei von „Ausgeschlossene Änderungen“ zu „Eingeschlossene Änderungen“ verschoben;
  2. Ich habe ein lokales Commit gemacht;
  3. Geschalteter Abzweig ohne Probleme;

Benutzer-Avatar
Ibrahim ben Salah

Ich hatte keine Uncommit-Änderungen, hatte immer noch den gleichen Fehler, als ich die Zusammenführung zum Entwickeln durchführte. Ich habe es versucht:

  1. git-Status und dann
  2. git ziehen

Und dann versucht den Merge neu zu entwickeln und der Fehler taucht nicht mehr auf. Allerdings musste ich einige Konflikte lösen. Ich kann mir vorstellen, dass nur der zweite Befehl wirklich relevant ist, aber ich habe keine Ahnung, was hier passiert, also dokumentiere ich lieber alle Schritte.

Ich musste die Befehlszeilen-Tools herunterladen und konnte dort den Master-Zweig auschecken (der ihn auch in VS auscheckte). Ich habe dann einen Git-Pull durchgeführt, der dann zusätzliche Fehler aufgrund von Konflikten mit der Zusammenführung der Remote- und lokalen Branches hervorbrachte. Die Konflikte wurden behoben, festgeschrieben und dann synchronisiert, wodurch dieses Problem behoben wurde.

http://blogs.msdn.com/b/visualstudioalm/archive/2013/03/08/use-the-git-command-prompt-to-supplement-visual-studio.aspx

1257000cookie-checkVisual Studio 2013-Github-Commit-Deadlock

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy