Git ignoriert und Maven Ziele

117

Jeder weiß, ob es möglich ist, alle Instanzen eines bestimmten Verzeichnisses in einer von git verwalteten Dateistruktur zu ignorieren.

Ich möchte alle 'Ziel'-Ordner in einem Maven-Projekt mit einer Reihe von Submodulen ausschließen. Ich weiß, dass ich jeden von ihnen in einem .gitignore der obersten Ebene explizit ausschließen kann, aber ich möchte wirklich in der Lage sein, dort ein Muster wie ** / target / * anzugeben, damit die Instanz in Unterverzeichnissen automatisch ignoriert wird.

Ist das möglich?

Sgargan
quelle
Mit welcher Konfiguration funktioniert das? /.settings/ würde nur 'xxx / .settings / *' ignorieren, nicht '.settings / *' oder 'xxx / yyy / .settings / *': Die Ignoriermuster scheinen nicht rekursiv angewendet zu werden. Siehe auch stackoverflow.com/questions/971465/... .
VonC

Antworten:

98

Es ist möglich, Muster in einer .gitignoreDatei zu verwenden. Siehe die gitignore-Manpage . Das Muster */target/*sollte jedes Verzeichnis mit dem Namen target und alles darunter ignorieren. Oder Sie versuchen */target/**, alles unter dem Ziel zu ignorieren.

Baudtack
quelle
4
Vielen Dank! Hier für alle anderen ist Inhalt für einen .gitignore, um die üblichen Maven & Eclipse-Verdächtigen zu überspringen. target / * / target / .metadata tar.gz .classpath .project * /. settings /
sgargan
3
Mit welcher Konfiguration funktioniert das? /.settings/ würde nur 'xxx / .settings / *' ignorieren, nicht '.settings / *' oder 'xxx / yyy / .settings / *': Die Ignoriermuster scheinen nicht rekursiv angewendet zu werden. Siehe auch stackoverflow.com/questions/971465/… .
VonC
6
Für Projekte mit mehreren Modulen möchten Sie möglicherweise ** / target / verwenden , aber achten Sie darauf, legitime "Ziel" -Verzeichnisse in den Quellen nicht auszuschließen
Bogdan
1
/target/**funktioniert in \.git\info\excludeDatei ein Brunnen.
Abhijeet
Ich habe gerade versucht, ein Java-Projekt mit dem Unterpaket "Ziel" in einem seiner Module festzuschreiben. :(
Okutane
222

Die .gitignoreDatei im Stammverzeichnis gilt für alle Unterverzeichnisse. Meins sieht so aus:

.classpath
.project
.settings/
target/

Dies ist in einem Maven-Projekt mit mehreren Modulen. Alle Submodule werden mit m2eclipse als einzelne Eclipse-Projekte importiert. Ich habe keine weiteren .gitignoreDateien. In der Tat, wenn Sie in der gitignore Manpage schauen :

Muster, die aus einer .gitignoreDatei im selben Verzeichnis wie der Pfad oder in einem übergeordneten Verzeichnis gelesen werden …

Das sollte also für Sie funktionieren.

Dominic Mitchell
quelle
5
Das ist eine bessere Antwort als ' / target / '. Es schließt ein Verzeichnis überall dort aus, wo es sich im Verzeichnisbaum befindet. Aber es würde nicht für Dateien funktionieren (siehe stackoverflow.com/questions/971465/… )
VonC
3
Wenn Sie weiterlesen, heißt es: "Diese Muster stimmen relativ zum Speicherort der .gitignore-Datei überein." Ihre Antwort ist falsch ...
user1387219
Ich verwende diesen Ansatz und verwende "target /", um alle Maven-Build-Ordner zu ignorieren. Achten Sie jedoch darauf, dass Sie das Risiko eingehen, Code zu ignorieren, der sich in Paketen befindet, deren Pfad einen "target" -Ordner enthält. (In einem Projekt mit den folgenden Klassen: src/main/java/org/example/game/archery/bow/LongBow.java und src/main/java/org/example/game/archery/target/Target.java, Sie würden nichts finden, um mit Ihrem LongBow mit einer solchen .gitignore-Konfiguration zu treffen :-))
Cristiano Costantini
4

Wie bereits in den Kommentaren von Abhijeet erwähnt, können Sie einfach folgende Zeilen hinzufügen:

/target/**

ausschließen Datei im \.git\info\Ordner.

Wenn Sie diesen targetOrdner in Ihrem Remote-Repo entfernen möchten, müssen Sie diesen Ordner zuerst manuell aus Ihrem lokalen Repository löschen, festschreiben und dann verschieben. Das liegt daran, dass git Ihnen den Inhalt eines Zielordners anzeigt, der zuerst geändert wurde.

Tomasz Mularczyk
quelle
2

Ich ignoriere alle Klassen, die sich im Zielordner von git befinden. Fügen Sie der geöffneten .gitignore-Datei die folgende Zeile hinzu:

/ .class-

ODER

*/Ziel/**

Es funktioniert perfekt für mich. Versuch es.

Rajeev Rathor
quelle
0

Fügen Sie in gitignore die folgenden Zeilen aus allen unerwünschten Dateien hinzu

/target/
*/target/**
**/META-INF/
!.mvn/wrapper/maven-wrapper.jar

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
Gleidosn
quelle