Git ignore et les cibles Maven

117

Tout le monde sait s'il est possible d'ignorer toutes les instances d'un répertoire particulier dans une structure de fichiers gérée par git.

Je cherche à exclure tous les dossiers «cible» dans un projet maven avec un certain nombre de sous-modules. Je sais que je peux explicitement exclure chacun d'eux dans un .gitignore de niveau supérieur, mais j'aimerais vraiment pouvoir spécifier un modèle comme ** / target / * pour qu'il ignore automatiquement l'instance dans les sous-répertoires?

Est-ce possible?

sgargan
la source
Avec quelle configuration faites-vous ce travail? /.settings/ n'ignorerait que «xxx / .settings / *», pas «.settings / *» ou «xxx / yyy / .settings / *»: les modèles ignorés ne semblent pas être appliqués de manière récursive. Voir également stackoverflow.com/questions/971465/… .
VonC le

Réponses:

98

Il est possible d'utiliser des motifs dans un .gitignorefichier. Consultez la page de manuel de gitignore . Le modèle */target/*doit ignorer tout répertoire nommé target et tout ce qui se trouve en dessous. Ou vous pouvez essayer */target/**d'ignorer tout sous la cible.

baudtack
la source
4
Merci! Voici pour n'importe qui d'autre, le contenu d'un .gitignore pour ignorer les suspects habituels de maven et d'éclipse. target / * / target / .metadata tar.gz .classpath .project * /. settings /
sgargan
3
Avec quelle configuration faites-vous ce travail? /.settings/ n'ignorerait que «xxx / .settings / *», pas «.settings / *» ou «xxx / yyy / .settings / *»: les modèles ignorés ne semblent pas être appliqués de manière récursive. Voir également stackoverflow.com/questions/971465/… .
VonC le
6
Pour les projets multi-modules, vous pouvez utiliser ** / target / , mais veillez à ne pas exclure les répertoires "cibles" légitimes des sources
Bogdan
1
/target/**fonctionne bien dans le \.git\info\excludefichier.
Abhijeet
J'ai juste essayé de valider un projet java avec un sous-paquetage "cible" dans l'un de ses modules. :(
okutane
222

Le .gitignorefichier dans le répertoire racine ne s'applique à tous les sous - répertoires. Le mien ressemble à ceci:

.classpath
.project
.settings/
target/

C'est dans un projet maven multi-module. Tous les sous-modules sont importés en tant que projets d'éclipse individuels à l'aide de m2eclipse. Je n'ai plus de .gitignorefichiers. En effet, si vous regardez dans la page de manuel de gitignore :

Modèles lus à partir d'un .gitignorefichier dans le même répertoire que le chemin, ou dans n'importe quel répertoire parent

Cela devrait donc fonctionner pour vous.

Dominic Mitchell
la source
5
C'est une meilleure réponse que « / target / ». Il exclut un répertoire où qu'il se trouve dans l'arborescence des répertoires. Mais cela ne fonctionnerait pas pour les fichiers (voir stackoverflow.com/questions/971465/… )
VonC
3
si vous continuez à lire, il est dit "Ces modèles correspondent à l'emplacement du fichier .gitignore." Votre answear est faux ...
user1387219
J'utilise cette approche et j'utilise "target /" pour ignorer tous les dossiers de build maven, mais attention, vous risquez d'ignorer le code qui se trouve dans les packages contenant un dossier "target" dans leur chemin. (Dans un projet avec les classes suivantes: src/main/java/org/example/game/archery/bow/LongBow.java et src/main/java/org/example/game/archery/target/Target.java, vous ne trouveriez rien à frapper avec votre LongBow avec une telle configuration .gitignore :-))
Cristiano Costantini
4

Comme déjà souligné dans les commentaires d'Abhijeet, vous pouvez simplement ajouter une ligne comme:

/target/**

pour exclure le fichier du \.git\info\dossier.

Ensuite, si vous souhaitez vous débarrasser de ce targetdossier dans votre référentiel distant, vous devrez d'abord supprimer manuellement ce dossier de votre référentiel local, le valider, puis le pousser. C'est parce que git vous montrera le contenu d'un dossier cible tel que modifié au début.

Tomasz Mularczyk
la source
2

J'ignore toutes les classes résidant dans le dossier cible de git. ajoutez la ligne suivante dans le fichier .gitignore ouvert:

/ .class

OU

*/cible/**

Cela fonctionne parfaitement pour moi. essayez-le.

Rajeev Rathor
la source
0

ajouter les lignes suivantes dans gitignore, à partir de tous les fichiers indésirables

/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
la source