Wie zwinge ich git zu denken, dass eine Datei nicht eingebunden ist?

8

Ich möchte Änderungen an einer Datei in meinem Repo vornehmen und erzwinge dann git zu glauben, dass die Datei nicht eingebunden ist und in git status like so angezeigt wird:

%Vor%

Das ist die Gesamtheit meiner Frage. Lesen Sie weiter für eine Erklärung, warum, weil ich weiß, dass das erste, was gefragt wird.

Der Zweck hier ist ein Bugfix für Piston , der heute Zusammenführungskonflikte im Index lässt, wo sie zu leicht übersehen werden.

>

Die Art, wie piston update mit einem Git Repo arbeitet, ist:

  • Klonen Sie den Remote-Repo in ein neues temporäres Git-Repo
  • Überprüfen Sie den Temp-Repo auf den letzten Commit, den wir gesehen haben (gespeichert in .piston.yml)
  • Überprüfen Sie unser lokales Repository (in einem neuen Zweig) bis zum letzten Commit, bei dem .piston.yml aktualisiert wurde
  • Kopieren Sie die lokalen Repo-Dateien in den Temp Repo
  • Übernehmen Sie alle Änderungen im Temp-Repo (dies sind unsere lokalen Änderungen seit der letzten Aktualisierung dieses vendored-Projekts)
  • Führen Sie git merge master im temporären Repo aus, um unsere lokalen Änderungen mit den Änderungen des fernen Repos zusammenzuführen
  • IGNORE MERGE CONFLICTS (!) und kopiere alle Dateien aus dem Temp Repo in unser lokales Repo
  • Übergeben Sie diese Dateien (in unserer neuen temporären Zweigstelle) an unser lokales Repo
  • Beende den lokalen Repo zurück zu unserem ursprünglichen Startpunkt
  • Fusion temporärer Zweig in lokalen Repo (fügt weitere Änderungen hinzu, die wir vorgenommen haben)

Ich erwarte, dieses Problem zu beheben, indem ich die Datei mit Zusammenführungskonflikten in den temporären Zweig einbinden lasse, aber ganz am Ende (nachdem git merge --squash läuft) möchte ich git über die Dateien informieren, die einen Zusammenführungskonflikt hatten im Temp Repo.

    
ScottJ 08.12.2009, 20:11
quelle

1 Antwort

12

In der Git-Datei, die einen Zusammenführungskonflikt hat, gibt es (normalerweise) drei Versionen im Index und eine Version im Arbeitsbereich mit den Konfliktmarkern diff3 -E / rcsmerge . Die Versionen im Index sind Stufe 1 von gemeinsamen Vorfahren, Stufe 2 für "unsere" Version und Stufe 3 für "ihre" Version. Für nicht zusammengefügte Dateien gibt es keine Version in Stufe 0 (Sie können git update-index --unresolve verwenden, um den nicht zusammengefassten Zustand wiederherzustellen, indem Stufe 0 gelöscht wird).

Sie müssten git ls-files --stage oder git ls-tree <commit> verwenden, um sha-1 Bezeichner von Blobs (Dateiversionen) zu erhalten, die Sie in den Index einfügen möchten, oder git hash-object -w <file> , wenn Sie die Version einer Datei von Grund auf neu generieren möchten. aus der Arbeitsbereichsversion. Dann verwenden Sie git update-index --index-info , um Stufen höherer Ordnung in die Indexdatei zu legen (und git update-index --unresolve danach oder git update-index --force-remove vor dem Füllen höherer Stufen, um Stufe 0 aus dem Index zu entfernen). Sie können die Datei mit Mergemarkern im Arbeitsbereich mithilfe von git checkout --conflict=merge -- <file> neu generieren.

HTH (Hoffnung, die hilft)

Siehe auch: " Wie wird der Zusammenführungszustand selektiv wiederhergestellt? "Thread auf Git-Mailing-Liste.

    
Jakub Narębski 08.12.2009, 21:33
quelle

Tags und Links