# IntelliJ, Gradle und Git: gitignore



## temi (15. Jun 2020)

Hallo zusammen!

Nach dem Erstellen eine neuen Projektes in IntelliJ mit Gradle erhält man ja ungefähr folgende Struktur:

```
>.gradle
>.idea
>gradle
>src
build.gradle
gradlew
gradlew.bat
settings.gradle
```

Innerhalb von .idea findet man auch eine minimale .gitignore, die ich zunächst mal direkt in die oberste Verzeichnisebene verschoben habe.

Auf der IntelliJ-Webseite findet man einen Vorschlag für den Inhalt von .gitignore:

```
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
.idea/artifacts
.idea/compiler.xml
.idea/jarRepositories.xml
.idea/modules.xml
.idea/*.iml
.idea/modules
*.iml
*.ipr

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
```

Teile davon brauche ich sicher nicht, aber sie schaden wohl auch nicht.

Fehlt da noch was? Was ist mit den Ordnern .gradle und gradle?


----------



## JennyL (15. Jun 2020)

```
/*
/*/
!/src/
!/build.gradle
!/settings.gradle
```
So hätte ich es gemacht


----------



## kneitzel (15. Jun 2020)

Also erst einmal: Du musst die .gitignore nicht verschieben. Du kannst die auch in Unterverzeichnissen nutzen um da weitere Regeln zu haben.

Ich selbst würde nie so rigoros alles ausschließen wie von @JennyL empfohlen. Die Gefahr ist in meinen Augen einfach zu groß, dass dann plötzlich Dateien nicht eingecheckt werden. Diese Gefahr eines Datenverlustes ist in meinen Augen zu groß.

Die .gitignore bei Java Projekten könnte ansonsten solche Standard-Einträge haben (Das ist einmal mit einem Gradle Projekt erzeugt worden):

```
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**
!**/src/test/**

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

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

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

### VS Code ###
.vscode/
```

Aber ich selbst habe sowas in der Regel nicht wirklich so massiv drin. Was man erkennen kann: Hier wird generell kein Projekt mit eingecheckt. Das Projekt selbst ist gradle. Du kannst es mit der IDE öffnen, die Du nutzen willst, aber die Dateien kommen dann nicht mit rein nach git.

Meine Arbeitsweise ist das nicht. Ich mag es, dass die Projekte auch mit eingecheckt sind. Alleine um im Team ein gemeinsames Projekt zu haben (so alle die gleiche IDE nutzen). Das ist schon ein Vorteil, gerade wenn auch mal weniger versierte Leute da rein schauen müssen. (Junior Member, C++ Entwickler, die dann auch mal im Java Part rein schauen wollen, ...)

Da ist aber schlicht die Frage: Was ist deine Erwartungshaltung? Was genau hat Priorität?


----------



## JennyL (15. Jun 2020)

Evtl auch das führende / weglassen

```
*
*/
!src/
!build.gradle
!settings.gradle
```


----------



## temi (15. Jun 2020)

JustNobody hat gesagt.:


> Was ist deine Erwartungshaltung? Was genau hat Priorität?


Ich möchte nicht unnötig viel einchecken, würde also wenigstens build/ und out/ ausschließen. Sowie ggf. Daten, die z.B. durch build.gradle erzeugt werden und sich sozusagen selbst rekonstruieren können, wenn du verstehst, was ich meine.

Allerdings muss ich zugeben, das ich nicht so sicher bin, was dazu alles notwendig ist.



JustNobody hat gesagt.:


> Ich mag es, dass die Projekte auch mit eingecheckt sind.


Das bedeutet, dass du alles außer die beiden o.g. eincheckst, um das komplette Projekt zur Verfügung zu haben?

Oder schließt du noch die userspezifischen IDE-Sachen aus?

```
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

build/
out/
```


----------



## kneitzel (15. Jun 2020)

Die User-spezifischen Dinge sollte IntelliJ bereits ausschließen, denn dazu wurde in .idea ja ein .gitignore erzeugt.

So dieses da ist, musst Du also nichts mehr selbst machen, aber die generierte Datei sieht bei mir so aus:

```
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
```


----------



## temi (15. Jun 2020)

JustNobody hat gesagt.:


> Die User-spezifischen Dinge sollte IntelliJ bereits ausschließen, denn dazu wurde in .idea ja ein .gitignore erzeugt.
> So dieses da ist, musst Du also nichts mehr selbst machen, aber die generierte Datei sieht bei mir so aus:


Das ist vorhanden, aber etwas kürzer:

```
# Default ignored files
/shelf/
/workspace.xml
```
Zusätzlich würde ich noch ein .gitignore ins Projektverzeichnis legen:

```
# Gradle and Maven with auto-import
.idea/artifacts
.idea/compiler.xml
.idea/jarRepositories.xml
.idea/modules.xml
.idea/*.iml
.idea/modules
*.iml
*.ipr

# IntelliJ
out/
build/
```
Ist das einigermaßen plausibel?


----------



## mrBrown (15. Jun 2020)

https://www.toptal.com/developers/gitignore 

Gradle, Java, Linux, Mac, Windows, IntelliJ ist meist ein sinnvoller Anfang


----------

