Android Studio - sollte das gesamte .idea-Verzeichnis in git ignoriert werden?

137

Ich habe viele Beispiele für .gitignoreDateien für AndroidStudio gesehen , einige haben .ideasie und andere nicht.

Gibt es einen guten Grund, nicht das gesamte .idea-Verzeichnis zu .gitignore hinzuzufügen?

Wenn es nicht vollständig ignoriert werden sollte, gibt es bestimmte Dateien in .idea (wie .iml), die sich in .gitignore befinden sollten?

dors
quelle
Ich ignoriere .ideabis auf einige der Dateien unter .idea/runConfigurations/.
Daniel
1
Obermenge: stackoverflow.com/questions/16736856/…
Ciro Santilli 郝海东 冠状 病 六四 事件 24

Antworten:

104

Sie können sich diese Seite ansehen:

IntelliJ-Dokument zu Projektkonfigurationsdateien

Im "Verzeichnisbasierten Format" ist eine bestimmte Zeile interessant:

Das .idea-Verzeichnis enthält eine Reihe von Konfigurationsdateien (.xml). Jede Datei enthält nur einen Teil der Datenkonfiguration auf einen bestimmten Funktionsbereich betreffen , die in dem Namen einer Datei reflektiert wird, zum Beispiel compiler.xml, encodings.xml, modules.xml.

Fast alle Dateien enthalten den Kern des Projekts selbst, wie Namen und Speicherorte der Komponentenmodule, Compilereinstellungen usw. Daher können (und sollten) diese Dateien unter Versionskontrolle gehalten werden.

Ich HASSE es jedoch, Projekt-IDE-abhängig zu machen (ich arbeite derzeit an einem Projekt, das mit NetBeans erstellt wurde, und es tut weh, es mit Eclipse zu verwenden, das zum Standard meines Unternehmens wird).

Um Ihre Frage zu beantworten:

  1. Wenn Sie zum Verwalten von Abhängigkeiten und zum Erstellen nicht Maven oder Gradle verwenden, behalten Sie das Verzeichnis unter Versionskontrolle . Auf diese Weise ist die korrekte Konfiguration des Projekts und der Abhängigkeiten für alle verfügbar. Im Gegenstück müssen alle Entwickler ihre Umgebung genauso einstellen, wie Sie sie in den Konfigurationsdateien definiert haben.
  2. Wenn Sie Gebrauch machen so etwas wie Maven oder Gradle: richtig , diese Werkzeuge konfigurieren und nicht halten Sie das Verzeichnis unter Versionskontrolle . Eigentlich sind alle Informationen enthalten innerhalb Konfigurationsdateien sollten werden in Maven / Gradle Dateien gespeichert. Lassen Sie dann Ihre Entwickler ihre IDE abhängig von ihrer Umgebung konfigurieren. Auf diese Weise ist die Verwendung von Eclipse, IntelliJ, Linux, Windows ... kein Problem mehr.
Mithrop
quelle
9
Beachten Sie jedoch den nächsten Absatz: "Die Ausnahme ist die Datei workspace.xml. Sie speichert Ihre persönlichen Einstellungen ... Es ist daher unwahrscheinlich, dass Sie diese Datei für Ihre Kollegen freigeben möchten."
Dalbergia
40

OK, also nach einigen "Ja" - und "Nein" -Antworten füge ich eine "Ja und Nein" -Antwort hinzu :)

Das Problem besteht darin, dass .ideaes sowohl für die Projektbuildkonfiguration (Abhängigkeitsdeklaration) als auch für die Projekteinstellungen (Inspektionen usw.) verwendet wird.

Sie möchten Ihre IDE definitiv nicht für Ihre Build-Konfiguration verwenden, möchten aber möglicherweise die Einstellungen für das Team freigeben. Deshalb sollten Sie nur einen Teil der ignorieren müssen .ideaInhalte (wie die librariesOrdner und die modules.xmlDatei), aber halten andere in der Versionskontrolle (zB copyright, dictionariesund inspectionProfilesOrdner und Dateien unter .ideawie dynamic.xml, codeStyleSettings.xmlusw.).

JBaruch
quelle
Wie konkret würden IML-Dateien adressiert?
Dors
1
IML-Dateien sollten auf jeden Fall ignoriert werden.
JBaruch
1
Ich denke immer noch, dass die Konfigurationen nicht in IDE-abhängigen Dateien gespeichert werden sollten, und deshalb ist es für Maven / Gradle besser, dies zu tun.
Mithrop
@mithrop die Sache ist - Sie können diese Art der Konfiguration nicht in der Maven / Gradle-Datei deklarieren. Es ist Ideas eigenes Eigenschaftsformat und es gibt keine tragbaren Alternativen in Maven / Gradle.
JBaruch
Oh ja, du hast recht. Wie auch immer, wenn Sie es nicht in Maven / Gradle-Dateien ablegen können, haben Sie ein Problem mit dem nächsten Import des Projekts in eine andere IDE (was das Problem ist, das ich nicht gerne behandeln möchte). Aber ich stimme Ihnen voll und ganz zu (wenn Sie meine Antwort lesen, werden Sie sehen, dass ich es wirklich bin): Sie
fügen
7

Das Konzept, die Projektkonfiguration in VC beizubehalten, ist gültig. Ich habe dies mit meinem Team gemacht, weil alle unsere Entwickler PHPStorm für unsere Projekte verwendet haben und es daher sinnvoll war, eine gemeinsame Konfiguration beizubehalten ... im Konzept. Wir wollten dieselben Wörterbuchdateien, dieselben Codierungsstandardregeln und dieselben Plugin-Konfigurationen verwenden.

Der Grund, warum ich dies mit "im Konzept" qualifiziere, ist, dass es Probleme mit dem .idea-Ordner von JetBrains gab, die dazu führten, dass wir ihn nicht verwenden konnten. Dies waren wahrscheinlich Probleme, die hätten vermieden oder behoben werden können, aber es war uns unklar, wie wir es richtig machen sollten, und wir denken, dass dies ein Fehler von JetBrains ist, da wir als Entwickler weder Zeit noch Lust haben, nach Lösungen zu suchen, wie man es macht Unsere IDE funktioniert korrekt.

Davon abgesehen gab es folgende Probleme:

  • Das Verknüpfen von Projektordnern funktioniert nicht richtig. Wenn ich meine Projekte einrichte, verknüpfe ich sie mit meinem Home-Verzeichnis. Wir haben festgestellt, dass das Projekt so eingerichtet wurde, dass es den genauen Symlink verwendet, anstatt ihn nur wie ein konkretes Verzeichnis zu behandeln. Dies bedeutet, dass, wenn ein anderer Entwickler sein Projekt an einem anderen Ort aufbewahrt oder einfach keine Symlinks verwendet, das gesamte Verzeichnis im Projektnavigator fehlt, da buchstäblich nach dem Symlink gesucht wird. Schlimmer ist, dass ich diesen Pfadwert in der Konfiguration nie finden konnte. Wir konnten die genaue Konfiguration in den Dateien, aus denen unser .idea-Ordner besteht, nicht finden.
  • Definitionsdateien werden standardmäßig für Benutzer partitioniert. Das heißt, wenn ich meinem Wörterbuch ein Wort hinzufügen möchte, wird es als Definition für mich, jgreathouse, aufgeführt, aber andere Benutzer haben ihren eigenen Definitionsabschnitt. Die markierten Wörter werden weiterhin als Rechtschreibfehler für andere Benutzer angezeigt. Dies ist nicht wünschenswert. Der Grund, warum ich es meiner Definitionsdatei hinzufüge, ist, dass die IDE falsch ist. Ich möchte, dass diese Definitionen intuitiv mit anderen Benutzern geteilt werden.
  • Die Kollegen haben die Konfigurationen immer wieder überschrieben, da ihre IDE die Konfigurationen mit ihrer derzeit im Speicher befindlichen Konfiguration überschrieb. Was ich damit meine ist, dass ein Entwickler arbeiten und sein Repository vom Ursprung zusammenführen würde, das eine Änderung der Projektkonfiguration enthalten würde, anstatt seine IDE-Konfigurationen zu ändern oder ihnen sogar eine Auswahl zu geben, würde es die .idea-Konfiguration automatisch mit überschreiben die aktuelle In-Memory-Konfiguration ihrer IDE. Meiner Meinung nach macht dies die .idea-Konfiguration als gemeinsam genutzte Konfiguration unbrauchbar. Um dies zu umgehen, müsste der Entwickler diese Instanz seiner IDE buchstäblich herunterfahren, das Repo abrufen und seine IDE erneut öffnen. Es macht keinen Sinn, eine gemeinsam genutzte Konfiguration beizubehalten, wenn die IDE sie sofort mit der aktuell im Speicher befindlichen Konfiguration überschreibt. Es'

Ich habe diese Arten von gemeinsam genutzten IDE-Konfigurationen in VC bereits mit Visual Studio und Netbeans durchgeführt und es war immer in Ordnung. aber mit .idea fühlt es sich einfach unbrauchbar an, was enttäuschend ist. Ich wünschte, JetBrains würde sich darum kümmern und die Benutzererfahrung verbessern.

Jesse Greathouse
quelle
> Anstatt dass ihre IDE die Konfiguration ändert oder ihnen sogar eine Auswahl gibt, wird die .idea-Konfiguration automatisch mit der aktuellen speicherinternen Konfiguration ihrer IDE überschrieben. Wow, das ist wirklich unglücklich. Gut zu wissen!
Greg Price