Gitigore eine Datei, wenn Datei mit anderer Erweiterung existiert

8

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, ignoriere foo.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?

    
Willem Van Onsem 04.02.2015, 15:32
quelle

2 Antworten

8

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.

  1. 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.

  2. Lassen Sie Ihre Makefile-Ziele auch die .gitignore mit

    aktualisieren %Vor%

    Dabei ist target die generierte Quelldatei als Teil des Rezepts.

  3. 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.

    
jthill 04.02.2015 20:01
quelle
1

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.

    
suuuzi 04.02.2015 19:42
quelle

Tags und Links