Kann git add nicht mit der Option –patch verwenden

Lesezeit: 5 Minuten

Benutzer-Avatar
Karl Fink

Ich habe kürzlich Git auf Version aktualisiert 2.7.2.windows.1 (Ich verwende Windows 7 64-Bit). Seit dem Update kann ich nicht mehr laufen git add mit dem -p Option auf Dateien in einem bestimmten Verzeichnis (oder seinen Unterverzeichnissen), dessen Name lautet _ (ein Unterstrich).

git status meldet korrekt, dass meine Datei Änderungen aufweist:

PS C:\Users\Carl\www\dl> git status
On branch develop
Your branch is up-to-date with 'origin/develop'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   _/php/class.Menu.php

Und ich kann die gesamte Datei mit einem einfachen hinzufügen git add, oder durch Angabe des Dateinamens. Aber wenn ich versuche, das einzuschließen -p oder --patch Option (beide Varianten liefern die gleichen Ergebnisse), meldet Git, dass es keine Änderungen gibt:

PS C:\Users\Carl\www\dl> git add -p .\_\php\class.Menu.php
No changes.

Dies geschieht nur für Dateien innerhalb der _ Verzeichnis, aber es spielt keine Rolle, ob ich cd in dieses Verzeichnis, um die auszuführen git add Befehl, ohne explizit einen Pfad mit einem Unterstrich angeben zu müssen; es geht immer noch nicht:

PS C:\Users\Carl\www\dl\_\php> git add -p .\class.Menu.php
No changes.

Ich hatte ursprünglich gedacht, dass dieses Problem mit einem ähnlichen Problem zusammenhängt, auf das ich kürzlich bei Dateien in der Datei gestoßen bin _ Verzeichnis, nach dem ich hier gefragt habe. Dieses Problem scheint jedoch mit der Posix-Pfadkonvertierung in MinGW zusammenzuhängen, während dieses Problem auftritt, unabhängig davon, ob ich Git Bash, Windows PowerShell oder cmd.exe verwende.

Wie ich in dieser vorherigen Frage sagte, glaube ich, dass Unterstriche in Datei-/Verzeichnisnamen gültig sind. Außerdem bin ich nicht der Eigentümer des Projekts, daher kann ich das Verzeichnis nicht umbenennen oder die Datei verschieben.

Ist das ein Bug in Git? Gibt es zusätzliche Schritte, die ich unternehmen kann, um festzustellen, was das zugrunde liegende Problem ist?

  • Bist du in ein Commit oder einen Branch ausgecheckt?

    – Christian Grabowski

    8. März 2016 um 22:44 Uhr

  • Nein, dies ist keine neue Datei. Es ist eine Datei, die bereits im Repository existiert, an der ich lediglich Änderungen vorgenommen habe.

    – Karl Fink

    8. März 2016 um 22:55 Uhr

  • Sind Sie jedoch auf einen einzigen Commit ausgecheckt? Meiner Erfahrung nach kann das zu einem seltsamen Verhalten führen, an dem man arbeiten muss.

    – Christian Grabowski

    9. März 2016 um 1:15 Uhr

  • Nein, bin ich nicht. Ich bin nur auf einem normalen Zweig, und alles ist auf dem neuesten Stand.

    – Karl Fink

    9. März 2016 um 1:17 Uhr

  • Dann müsste ich der Antwort von @Walle zustimmen, es ist nicht großartig, aber das sollte funktionieren.

    – Christian Grabowski

    9. März 2016 um 1:17 Uhr

Benutzer-Avatar
römisch

Nun, ich konnte dies reproduzieren, und es scheint, dass es sich um dieselbe POSIX-zu-Windows-Pfadkonvertierung handelt. ProcessMonitor zeigt das git (eigentlich, perl betrieben von git) sucht nach einer Datei C:\Program Files\Git\php\class.Menu.php.

Um dies zu umgehen (zumindest hat das bei mir funktioniert), entsprechend Dokumentationkönnen Sie die Umgebungsvariable festlegen MSYS_NO_PATHCONV vorübergehend so (in git bash):

MSYS_NO_PATHCONV=1 git add -p _/php/class.Menu.php

(Ich weiß nicht, wie man env-Variablen in cmd/powershell von Windows setzt, aber das sollte auch möglich sein.)

Sie sollten nicht aktivieren MSYS_NO_PATHCONV global/permanent (zB mit export in git bash oder das Ändern der Benutzer-/Systemumgebungsvariablen von Windows in den Systemeinstellungen), da dies zu unerwünschten Effekten führen kann und wahrscheinlich viel mehr Dinge kaputt macht als es repariert (siehe diesen SO-Kommentar). Eigentlich Git-Windows-Leute warnen gegen auch nur vorübergehende Aktivierung MSYS_NO_PATHCONV.
Trotzdem glaube ich langsam, dass das Problem von OP ein Git-for-Windows-Fehler ist und als solcher gemeldet werden sollte (könnte etwas damit zu tun haben, dass git-add ist eine binäre, aber git-add--interactive ist ein Perl-Skript).

Eine andere aufgeführte Problemumgehung besteht darin, den ersten Schrägstrich zu verdoppeln, z git add -p _//php/class.Menu.php (oder bedeutet das, dass der Parameter mit einem doppelten Schrägstrich beginnen muss?), aber das scheint aufgrund komplexer Zwischenpfadkonvertierungen nicht zu funktionieren, die zwischen dem Aufruf von stattfinden git add und der eigentliche Dateizugriff.

  • So legen Sie env-Variablen im cmd von Windows fest: set MSYS_NO_PATHCONV=1

    – Stijn de Witt

    13. März 2016 um 22:32 Uhr

  • @StijndeWitt Oder öffnen Sie die Systemsteuerung > System > Erweiterte Systemeinstellungen > Umgebungsvariablen, insbesondere wenn Sie etwas für alle Benutzer und nicht nur für Ihren aktuellen Benutzer festlegen müssen.

    – Galaktischer Cowboy

    14. März 2016 um 13:10 Uhr

  • @GalacticCowboy Denken Sie daran, dass Änderungen an Umgebungsvariablen in der Systemsteuerung erst nach einem Neustart an anderer Stelle angezeigt werden.

    – Dan spielt bei Feuerschein

    14. März 2016 um 17:25 Uhr

  • @DanNeely Dies geschieht (IIRC), da das Festlegen von env vars keine Auswirkungen auf laufende Prozesse hat und wenn Sie etwas über den Explorer starten, wird die bereits vorhandene Umgebung des Explorers geerbt. Ich denke, Sie können das umgehen, indem Sie den Explorer beenden und neu starten (oder sich im schlimmsten Fall abmelden / anmelden).

    – Gefrorene Kiwi

    14. März 2016 um 18:56 Uhr


  • @CarlFink Die Syntax zum Setzen von env-Variablen in PowerShell unterscheidet sich von bash (glaube ich), daher der Fehler. Die POSIX-zu-Windows-Pfadkonvertierung ist in PS noch in Kraft.

    – Römisch

    15. März 2016 um 18:55 Uhr

Ich würde es ohne versuchen .. Auch habe ich noch nie einen Dateinamen übergeben git add -p. Ich nehme einfach meine Änderung vor und führe das so aus, wie es ist. Ich würde auch überprüfen, ob alle von Ihnen vorgenommenen Änderungen tatsächlich auf diese bestimmte Datei angewendet werden und die Datei berührt wird.

  • PowerShell fügt automatisch die .\ wenn Sie einen Pfad mit der Tabulatortaste vervollständigen. Aber die Ergebnisse sind in beiden Fällen gleich – Git berichtet, dass es so ist no changes wenn es eindeutig gibt.

    – Karl Fink

    8. März 2016 um 22:31 Uhr


  • git add -p, ohne einen Dateinamen anzugeben, macht gar nichts. Es erzeugt keine Ausgabe und bringt nur die Eingabeaufforderung zurück. Nichts ist inszeniert.

    – Karl Fink

    8. März 2016 um 22:33 Uhr

  • @ChristianGrabowski, sowohl in Git Bash als auch in cmd.exe sind die Ergebnisse gleich: git add -p erzeugt keinerlei Ausgabe.

    – Karl Fink

    8. März 2016 um 22:36 Uhr

  • Sind Sie sicher, dass die Datei korrekt bearbeitet und gespeichert wird? Führen Sie zum Beispiel ein Diff für die Datei aus.

    – Christian Grabowski

    8. März 2016 um 22:43 Uhr

  • @ChristianGrabowski Ja, es gibt tatsächliche Änderungen an der Datei, und sie werden beim Ausführen korrekt angezeigt git diff.

    – Karl Fink

    8. März 2016 um 22:45 Uhr

1175690cookie-checkKann git add nicht mit der Option –patch verwenden

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

Privacy policy