Wie kann ich programmgesteuert simulieren, um einen Zusammenführungskonflikt mit GitPython zu lösen?

Wie meine jüngste Frage über die Verschmelzung von Filialen mit GitPython , versuche ich, die Lösung dort zu testen. Um dies zu tun, muss ich einen Benutzer simulieren, der ihr Zusammenführungswerkzeug öffnet, die Konflikte auflöst und das Ergebnis begangen hat.

Wenn ich das manuell mit der CLI mache, scheint es alles zu funktionieren:

echo 'Something to resolve the conflict' > conflicted_file.txt git add conflicted_file.txt git commit -m "Conflict resolved" 

Ich habe versucht, den gleichen Prozess mit GitPython zu simulieren:

 filename = 'conflicted_file.txt" with open(filename, 'w') as f: f.write('Some combined content which resolves the merge issue') # repo is a git.Repo instance repo.index.add([filename]) repo.index.commit("Simulating user resolving a conflict"+filename) 

.. aber das hebt gerade eine Ausnahme für mich:

 Traceback (most recent call last): File "C:\Projects\grit\test_Gritter.py", line 240, in test_MergeConflicts repo.index.commit("Simulating user resolving a conflict"+filename) File "C:\Python34\lib\site-packages\git\index\base.py", line 934, in commit tree = self.write_tree() File "C:\Python34\lib\site-packages\git\index\base.py", line 531, in write_tree binsha, tree_items = write_tree_from_cache(entries, mdb, slice(0, len(entries))) File "C:\Python34\lib\site-packages\git\index\fun.py", line 234, in write_tree_from_cache raise UnmergedEntriesError(entry) git.exc.UnmergedEntriesError: 100644 fd05580faebf11aee13944da595112eced471664 2 conflicted_file.txt 

Gibt es noch etwas, das ich als markiert markieren muss?

Bearbeiten – etwas mehr Hintergrund auf was ich versuche zu automatisieren

Also nur um klar zu sein, ich möchte es so einfach wie möglich machen, um Änderungen in einem entfernten Master-Zweig zusammenzuführen, der in einen entfernten Feature-Zweig aktualisiert wurde, um alle Zusammenführungskonflikte zu lösen.

Soweit mir bekannt ist, ist der richtige Weg, um das zu tun:

  1. Erstellen Sie einen lokalen Feature-Zweig
  2. Änderungen vornehmen
  3. Schieben Sie meine Änderungen auf die Fernbedienung
  4. … mittlerweile verschmilzt jemand anderes ihre änderungen in den entfernten meister, also muss ich jetzt diese änderungen in meine zwecke vereinen …
  5. Umschalten auf Master (auf meiner lokalen Kasse)
  6. Ziehen Sie vom entfernten Master, um meine lokale Kopie zu aktualisieren
  7. Wechseln Sie zu meinem lokalen Merkmal
  8. Versuche zu fusionieren
  9. Konflikte lösen
  10. Schieben Sie den Merge auf den Remote-Feature-Zweig

Ich habe das meiste davon in einem einzigen Python-Skript, aber das Problem, das diese Frage betrifft, ist die Simulation von Schritt 9 in den obigen Schritten.

  • Pip install Failed in OpenShift, die Fehlerinfo ist Permission Denied
  • Wie ziehe ich von der Fernbedienung mit dulwich?
  • Welcher Benutzer wird Ansible meine Befehle ausführen?
  • OSError: [Errno 2] Keine solche Datei oder ein Verzeichnis auf GitPython
  • Git show / log ohne Shell-Escape-Sequenzen, zur Verwendung mit Python Sh
  • Wie mache ich ein Git Diff der aktuellen Commit mit dem letzten Commit mit Gitpython?
  • One Solution collect form web for “Wie kann ich programmgesteuert simulieren, um einen Zusammenführungskonflikt mit GitPython zu lösen?”

    Ich gab auf, die Internets von GitPython zu benutzen, weil der Versuch, die auslösenden Befehle aus den Unit-Tests zu entwirren, eher schwierig war.

    Am Ende hat das gearbeitet:

     g = git.Git('my/repo') g.execute(["git","add","conflicted_file.txt"]) g.execute(["git","commit","-m", "Conflict resolved"]) 
    Python ist die beste Programmiersprache der Welt.