Fatal: git wurde ohne Unterstützung für git-add–interactive erstellt (NO_PERL=1)

Lesezeit: 7 Minuten

Wenn ich “git add -i” mache, erscheint dieser Fehler:

fatal: git wurde ohne Unterstützung für git-add–interactive gebaut (NO_PERL=1)

Ich brauche dringend Hilfe!

  • Es teilt Ihnen mit, dass Ihre Kopie von git ohne Perl kompiliert wurde und daher viele interaktive Features von git nicht unterstützt. Kannst du nicht mit dem einfachen Alten gehen? git add?

    – bemerkenswert

    28. Mai 2015 um 17:22 Uhr


  • Auf was fährst du? Wie hast du Git installiert?

    – Lerchen

    28. Mai 2015 um 17:27 Uhr

  • git installiert Ja wirklich leicht hinein $HOME. make install von einer sauberen Kasse tut es. Wenn Perl tatsächlich auf Ihrem System fehlt, installieren Sie es zuerst und dann werden die Module, die Sie benötigen, mehr involviert sein, was mit CPAN und allem, aber es ist nicht schwer.

    – jthill

    28. Mai 2015 um 17:36 Uhr


Benutzer-Avatar
VonC

Mit Git 2.25 (Q1 2020, fünf Jahre später) soll Perl keine Voraussetzung mehr sein git add.
Hier, “git add -i” wird in C umgeschrieben.

Sehen Commit 8c15904, 3d965c7 übernehmen (15. November 2019) und Commit 1daaebc (13. November 2019) von Slavica Đukić (slavicaDj).
Sehen 68db1cb übergeben, Commit 76b7432, 6348bfb begehen (15. November 2019) und f83dff6 übergeben (13. November 2019) von Johannes Schindelin (dscho).
Sehen Commit 5e82b9e, e4cb659 übergeben (13. November 2019) von Daniel Ferreira (theiostream).
(Zusammengeführt von Junio ​​C. Hamano — gitster in f7998d9 übergeben05.12.2019)

built-in add -i: Umsetzung der help Befehl

Unterzeichnet von: Slavica Đukić
Unterzeichnet von: Johannes Schindelin

Dies ahmt den Code nach, um den Hilfetext aus dem Perl-Skript anzuzeigen git-add--interactive.perl in der Einbauversion.

Und:

built-in add -i: eindeutige Präfixe der Befehle anzeigen

Original-Patch-by: Slavica Đukić
Unterstützt von: SZEDER Gábor
Unterzeichnet von: Johannes Schindelin

Genau wie im Perl-Skript git-add--interactive.perlfür jeden Befehl eine eindeutige Präfix wird bestimmt (sofern innerhalb der angegebenen Parameter vorhanden), in der Liste angezeigt und als Abkürzung für den Befehl akzeptiert.

Um die eindeutigen Präfixe zu bestimmen und den betreffenden Befehl nachzuschlagen, verwenden wir eine Kopie der Liste und sortieren sie.

Während dies für einen einzelnen Befehl wie ein Overkill erscheinen mag, ist es viel sinnvoller, wenn alle Befehle implementiert sind und wenn wir dieselbe Logik wiederverwenden, um eine Liste der zu bearbeitenden Dateien mit praktischen eindeutigen Präfixen anzuzeigen.

Zu Beginn der Entwicklung dieser Patch-Serie wurde eine eigene Datenstruktur eingeführt, die den Trie nachahmt, den die Perl-Version implementiert. Dies wurde jedoch als übertrieben angesehen, und wir sortieren jetzt einfach die Liste, bevor wir die Länge der eindeutigen Präfixe bestimmen, indem wir uns den Nachbarn jedes Elements ansehen. Als Bonus verwenden wir jetzt dieselbe sortierte Liste, um eine binäre Suche mit dem vom Benutzer bereitgestellten Präfix als Suchschlüssel durchzuführen.

add-interactive.c erklärt:

Eine “Präfix-Elementliste” ist eine Liste von Elementen, die durch eine Zeichenfolge identifiziert werden, und ein eindeutiges Präfix (falls vorhanden) wird für jedes Element bestimmt.

Am Anfang:

git add -i: Beginnen Sie mit der Implementierung einer integrierten Version von git add --interactive

Unterzeichnet von: Johannes Schindelin

Im Gegensatz zu früheren Konvertierungen in C, bei denen wir mit einem integrierten Helfer begonnen haben, beginnen wir diese Konvertierung, indem wir eine Interception in der hinzufügen run_add_interactive() Funktion, wenn das neue Opt-in add.interactive.useBuiltin config-Regler eingeschaltet ist (oder die entsprechende Umgebungsvariable GIT_TEST_ADD_I_USE_BUILTIN) und Aufrufen der neuen internen API-Funktion run_add_i() das direkt in implementiert ist libgit.a.

Den ganzen Bogen des Umbaus findet ihr in den PRs #170-175 an github.com/gitgitgadget/git.

Das “--helper Ansatz” kann hier leider nicht verwendet werden: Unter Windows haben wir das sehr spezifische Problem, dass a system() Anruf in Perl scheint zu schließen stdin im übergeordneten Prozess, wenn der erzeugte Prozess auch nur ein Zeichen verbraucht stdin. Das hindert uns daran, die Hauptschleife in C zu implementieren und trotzdem zu versuchen, an das Perl-Skript zu übergeben.

Der wirkliche Nachteil des Ansatzes, den wir hier verfolgen müssen, ist, dass die Testsuite nicht bestehen wird GIT_TEST_ADD_I_USE_BUILTIN=true bis die Konvertierung abgeschlossen ist (die --helper Ansatz hätte es passieren lassen, selbst bei jedem der inkrementellen Konvertierungsschritte).


Hinweis: Sie könnten mit Git 2.25 die Fehlermeldung sehen (gemeldet in git-for-windows/git Ausgabe 2466):

BUG: pathspec.c:555: PATHSPEC_PREFER_CWD requires arguments

Dies sollte in Git 2.25.2 (März 2020) behoben werden.

Sehen Commit 849e43c, d660a30 übergeben (16. Januar 2020) von Johannes Schindelin (dscho).
(Zusammengeführt von Junio ​​C. Hamano — gitster in f094074 übergeben30. Januar 2020)

built-in add -i: Offene Bereiche wieder akzeptieren

Unterzeichnet von: Johannes Schindelin

Das Interaktive add Der Befehl ermöglicht die Auswahl mehrerer Dateien für einige seiner Unterbefehle über eindeutige Präfixe, Indizes oder Indexbereiche.

Bei Neuimplementierung git add -i in C haben wir sogar einen Codekommentar hinzugefügt, der über Bereiche mit einem fehlenden Endindex spricht, wie z 2-aber der Code akzeptierte diese nicht wirklich, wie in a Kommentar von git-for-windows/git issue 2466 von qhill.

Nebenbei die Umschreibung von git add --interactive in C brach die Fähigkeit, Dateien mit einem offenen Bereich auszuwählen, z Patch update>> 2- um alle bis auf die erste Datei auszuwählen.
Dies hängt mit diesem Problem zusammen, da der Versuch, dies zu versuchen, zum gleichen Verhalten wie bei diesem Problem führt (dh BUG in 2.24.1.windows.2 und sofortiges Beenden in 2.25.0.windows.1).

Lassen Sie uns dies beheben und einen Testfall hinzufügen, um zu überprüfen, ob dies für immer behoben bleibt.


Mit Git 2.26 (Q1 2020) ist der Aufwand, “git-add--interactive“ zu C fährt fort.

Sehen c480eeb übergeben, cee6cb7 übergeben, 52628f9 übernehmen, Commit 6610e46, begehen 90a6bb9, Commit 36bae1d, Commit d2a233c (21.12.2019) von Johannes Schindelin (dscho).
(Zusammengeführt von Junio ​​C. Hamano — gitster in Commit 9a5315e05.02.2020)

eingebaut add -p: Vorbereitung für andere Patch-Modi als “Stage”

Unterzeichnet von: Johannes Schindelin

Die Perl-Skriptunterstützung git add -p wird nicht nur für diesen Befehl verwendet, sondern auch für git stash -p, git reset -p und git checkout -p.

Als Vorbereitung für das Unterrichten der C-Version von git add -p Um auch die letztgenannten Befehle zu unterstützen, lassen Sie uns das, was “stage”-spezifisch ist, in eine dedizierte Datenstruktur abstrahieren, die die Unterschiede zwischen den Patch-Modi beschreibt.

Beachten Sie abschließend, dass die Perl-Version versucht sicherzustellen, dass die Diffs nur für die geänderten Dateien generiert werden. Dies ist eigentlich nicht notwendig, da die Aufrufe an die Diff-Maschinerie von Git diese Arbeit bereits erledigen, und zwar gut. Dies macht eine Portierung überflüssig FILTER Feld der %patch_modes struct sowie die get_diff_reference() Funktion.

  • Ich bin auf 2.26.2 und ich bekomme immer noch fatal: git was built without support for git-add--interactive (NO_PERL=YesPlease) wenn ich laufe git add -p oder git stash -p

    – Agrim Pathak

    5. Juli 2020 um 22:37 Uhr

  • Und würden Sie am 27.2. immer noch diese Fehlermeldung erhalten?

    – VonC

    5. Juli 2020 um 22:52 Uhr

  • Ich werde Sie in ein paar Wochen informieren, sobald mein Paketmanager aktualisiert wird.

    – Agrim Pathak

    6. Juli 2020 um 16:05 Uhr

  • Ein Jahr später bin ich also auf 2.31.1 und brauche immer noch Perl, um diese Funktion zu nutzen. Keine große Sache, ich werde Git mit Perl bauen. Ich hatte gehofft, mit weniger Abhängigkeiten davonzukommen

    – Agrim Pathak

    21. August 2021 um 6:21 Uhr

  • @AgrimPathak Ich stimme zu. Dies ist noch nicht vollständig implementiert.

    – VonC

    21. August 2021 um 10:35 Uhr

Danke Jungs für eure Kommentare. Ich habe es behoben, indem ich git entfernt und mit “apt-get install git” installiert habe.

Das Problem war, dass die Bitnami-LAMP-VM mit einem vorgefertigten Git geliefert wurde, das meiner Meinung nach nicht mit PERL erstellt wurde. Ich habe meine PERL-Version überprüft und ist in Ordnung. Wie auch immer, alles ist gut.

  • Wie haben Sie Git zum ersten Mal entfernt? Bisher habe ich es einfach versucht apt-get install git auf meiner Bitnami LAMP VM, bekam aber wieder den gleichen Fehler.

    – Leif Segen

    26. April 2017 um 20:37 Uhr


1011190cookie-checkFatal: git wurde ohne Unterstützung für git-add–interactive erstellt (NO_PERL=1)

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

Privacy policy