In einem Projekt, in dem beispielsweise ein Parser involviert ist, ist ein gewisser Quellcode das Produkt eines Programms. Zum Beispiel erzeugt yacc
- basierend auf einer Datei .yy
- eine Quellcodedatei, die den Parser implementiert.
Da kleine Änderungen in der .yy
-Datei nach der Kompilierung zu großen Änderungen in der entsprechenden Quellcodedatei führen können und der resultierende Quellcode (fast) nie verändert wird, nachdem er erzeugt wurde. Solche Quellcodedateien sind perfekte Kandidaten für die .gitignore
-Liste.
Nun kann man solche Dateien natürlich manuell in die Liste schreiben:
%Vor%Aber es ist wahrscheinlich, wenn ein neuer Parser erstellt wird, er / sie wird vergessen, die Datei der Liste hinzuzufügen.
Gibt es eine Möglichkeit, ein Muster anzugeben, das folgendermaßen funktioniert:
Gegeben eine Datei
foo.ext1
exists, ignorierefoo.ext2
.
Wo gibt es also ext1
und ext2
. Im Falle des Lexers / Parsers würde dies bedeuten, dieses Muster für .xx
/ .cpp
und .yy
/ .cpp
anzuwenden.
Dies ist wahrscheinlich nicht direkt von .gitignore
möglich, aber vielleicht sind dafür schon einige Hooks implementiert?
Ich kann drei Möglichkeiten sehen, dies zu tun - um die Frage direkt zu beantworten, nein, die Verarbeitung zu ignorieren, konsultiert nur den fraglichen Pfadnamen, nichts anderes über die Umgebung.
Platzieren Sie Ihre generierte Quelle in einem von Ihnen ignorierten generated
-Ordner.
Ich mag das am besten, ich weiß, dass ich in der Minderheit bin, aber ich mag es nicht, Detritus in meinen Quellverzeichnissen zu erstellen.
Lassen Sie Ihre Makefile-Ziele auch die .gitignore
mit
Dabei ist target
die generierte Quelldatei als Teil des Rezepts.
Setzen Sie einen Marker in die generierten Dateinamen selbst, scanner.generated.c
oder etwas.
Aus irgendeinem Grund mag ich den Pre-Commit-Hook wirklich nicht, der unerwünschte Quellen bereinigt, git das Löschen von Dingen von einem Commit allein ist nur störend.
Mein Vorschlag ist ein Skript zu erstellen, um .gitignore zu aktualisieren. Ich kenne keine, aber Sie können nach einer Lösung suchen, die dieses Skript vor einem Commit automatisch ausführt.
Edit: Ich habe gegoogelt und Folgendes gefunden: Ссылка - Braucht wahrscheinlich einige Tests.