Soll ich meine Projektdateien unter Versionskontrolle halten? [geschlossen]

87

Sollte ich Projektdateien wie Eclipse's .project, .classpath, .settings unter Versionskontrolle halten (z. B. Subversion, GitHub, CVS, Mercurial usw.)?

Cretzel
quelle
12
So sehr konstruktiv
QED

Antworten:

93

Sie wollen in der Versionskontrolle halten alle tragbaren Einstellungsdateien , das
heißt:
Jede Datei , die in ihm keinen absoluten Pfad hat.
Das beinhaltet:

  • .Projekt,
  • .classpath ( wenn kein absoluter Pfad verwendet wird , was mit IDE-Variablen oder Benutzerumgebungsvariablen möglich ist)
  • IDE-Einstellungen (wo ich mit der 'akzeptierten' Antwort nicht einverstanden bin). Diese Einstellungen enthalten häufig Regeln für die statische Code-Analyse, die für die konsistente Durchsetzung durch jeden Benutzer, der dieses Projekt in seinen Arbeitsbereich lädt, von entscheidender Bedeutung sind.
  • IDE-spezifische Einstellungsempfehlungen müssen in eine große README-Datei geschrieben werden (und natürlich auch versioniert sein).

Faustregel für mich:
Sie müssen in der Lage sein, ein Projekt in einen Arbeitsbereich zu laden und alles darin zu haben, was Sie benötigen, um es ordnungsgemäß in Ihrer IDE einzurichten und in wenigen Minuten loszulegen.
Keine zusätzliche Dokumentation, Wiki-Seiten zum Lesen oder was nicht.
Laden Sie es auf, richten Sie es ein, gehen Sie.

VonC
quelle
@ Rich: Danke. Für die anderen Leser siehe Richs Antwort auf dieselbe Frage ein Jahr später: stackoverflow.com/questions/1429125/…
VonC
3
Schlüsselphase "... in
wenigen
3
Das VC-Repository sollte also die Konfigurationsdateien für jede IDE haben? NetBeans, Eclipse, Emacs, vi, was auch immer? Ich bin ausdrücklich nicht mit der Idee einverstanden, dass diese Dateien, weil der Entwickler für die Einrichtung seiner eigenen IDE verantwortlich sein sollte.
RHSeeger
3
@RH - "... sollte für die Einrichtung einer eigenen IDE verantwortlich sein". Das ist in Ordnung, bis einige Clowns vergessen, ihre Eclipse-Code-Stileigenschaften festzulegen ... und Quelldateien mit TABs einchecken. Grrrr !!
Stephen C
2
Ich bin auch anderer Meinung - wenn Sie CI, mehrere Versionen, Plattformen, IDEs usw. verwenden, bricht dies DRY ziemlich schlecht. Esp. da unterschiedliche Plugins / Einstellungen einen großen Einfluss darauf haben, was hier landet.
Jayshao
30

.project- und .classpath-Dateien yes. Wir behalten unsere IDE-Einstellungen jedoch nicht in der Versionskontrolle. Es gibt einige Plugins, die die Einstellungen nicht gut beibehalten, und wir haben festgestellt, dass einige Einstellungen von einem Entwicklungscomputer zum nächsten nicht sehr portabel waren. Wir haben stattdessen eine Wiki-Seite, auf der die Schritte aufgeführt sind, die ein Entwickler zum Einrichten seiner IDE benötigt.

Kevin
quelle
2
-1 Ich würde vorschlagen, Fehlerberichte für diese Plugins einzureichen, anstatt ihnen zu erlauben, die Zeit von Tausenden von Menschen zu verschwenden. Und dann würde ich alle stabilen Einstellungsdateien unter Versionskontrolle stellen und diese Wiki-Seite auf den Punkt bringen.
Aaron Digulla
18

Dies sind meiner Meinung nach generierte Dateien, und als solche stelle ich sie niemals unter Versionskontrolle. Sie können von Maschine zu Maschine und von Entwickler zu Entwickler unterschiedlich sein, beispielsweise wenn Benutzer verschiedene Eclipse-Plugins installiert haben.

Stattdessen verwende ich ein Build-Tool (Maven), das beim Auschecken erste Versionen dieser Dateien generieren kann.

Chris Vest
quelle
Um genau zu sein: mvn eclipse: eclipse generiert einen geeigneten .classpath und .project. Sie können es -DdownloadSources = true und -DdownloadJavadocs = true übergeben.
Aleksandar Dimitrov
Sie können das Eclipse-Plugin auch in Ihrem POM so konfigurieren, dass immer Quellen und Javadoc heruntergeladen werden.
Chris Vest
1
-1 Dies funktioniert so lange, wie Sie die Projekteinstellungen in Ihrer IDE nie ändern. Und die Gefahr ist: Wenn Sie sie ändern, werden Sie es nicht bemerken, weil die Dateien nicht versioniert sind. Ich bin also sehr versucht, dies abzustimmen. Tun Sie dies immer nur für wirklich einfache Projekte, wie Sie sie nicht mit anderen teilen möchten. In einem Team funktionieren die Standardeinstellungen normalerweise nicht und es ist ein sicheres Rezept für Chaos, jeden Entwickler zu bitten, sein Setup zu ändern.
Aaron Digulla
Aaron, das funktioniert auch, wenn Sie die Projektdateien in Ihrer IDE ändern. Was als nächstes passiert, ist, dass Sie Ihre Änderungen nicht an Ihr ahnungsloses Team weitergeben. IDE-Projekte enthalten häufig maschinen- und entwicklerspezifische Informationen, die nicht für alle funktionieren. Ich finde, je mehr Plug-Ins Sie verwenden und je komplexer Ihre Verwendung der IDE wird, desto schlimmer wird dies. Die Benutzer sollten wissen, wie ihre Tools funktionieren, und die Kontrolle über ihre Konfiguration haben. Ich tun , aber darüber einig , dass dieser Ansatz ist nicht ohne seine eigenen Probleme.
Chris Vest
Außerdem wird das Beheben von Zusammenführungskonflikten, die durch Plug-Ins verursacht werden, die diese Dateien leichtfertig bearbeiten, ziemlich schnell alt.
Chris Vest
7

Ich bin hier zwischen zwei Optionen hin und her gerissen.

Einerseits denke ich, dass jeder die Möglichkeit haben sollte, die Entwicklungswerkzeuge zu verwenden, mit denen er am produktivsten ist, solange alle Quellartefakte in der Versionskontrolle gespeichert sind und das Build-Skript (z. B. ANT oder Maven) die Einhaltung der Standards durch gewährleistet Festlegen, welches JDK genau verwendet werden soll, von welchen Versionen der Bibliotheken von Drittanbietern abhängig sein soll, Ausführen von Stilprüfungen (z. B. Prüfstil) und Ausführen von Komponententests usw.

Andererseits denke ich, dass so viele Leute dieselben Tools verwenden (z. B. Eclipse) und es oft viel besser ist, einige Dinge zur Entwurfszeit zu standardisieren, anstatt sie zu erstellen - zum Beispiel ist Checkstyle als Eclipse-Plugin weitaus nützlicher als als eine ANT- oder Maven-Aufgabe - es ist besser, die Entwicklungswerkzeuge und die allgemeinen Plugins zu standardisieren.

Ich habe an einem Projekt gearbeitet, bei dem jeder genau das gleiche JDK, die gleiche Version von Maven, die gleiche Version von Eclipse, den gleichen Satz von Eclipse-Plugins und die gleichen Konfigurationsdateien (z. B. Checkstyle-Profile, Code-Formatierungsregeln usw.) verwendet hat. Alle diese wurden in der Quellcodeverwaltung gespeichert - .project, .classpath und alles im Ordner .settings. Es machte das Leben in den Anfangsphasen des Projekts sehr einfach, als die Leute ständig die Abhängigkeiten oder den Erstellungsprozess optimierten. Es hat auch sehr geholfen, wenn dem Projekt neue Starter hinzugefügt wurden.

Alles in allem denke ich, dass Sie, wenn es nicht zu viele Chancen für einen Religionskrieg gibt, die grundlegenden Entwicklungswerkzeuge und Plugins standardisieren und die Versionskonformität in Ihren Build-Skripten sicherstellen sollten (z. B. durch explizite Angabe der Java-Version) .I Denken Sie nicht, dass das Speichern des JDK und der Eclipse-Installation in der Quellcodeverwaltung von großem Vorteil ist. Alles andere, was kein abgeleitetes Artefakt ist - einschließlich Ihrer Projektdateien, Konfigurations- und Plugin-Einstellungen (insbesondere Code-Formatierer und Stilregeln) - sollte in die Quellcodeverwaltung eingehen.

PS Wenn Sie Maven verwenden, gibt es ein Argument dafür, dass die Dateien .project und .classpath abgeleitete Artefakte sind. Dies gilt nur, wenn Sie sie jedes Mal generieren, wenn Sie einen Build erstellen, und wenn Sie sie nach dem Generieren aus dem POM noch nie von Hand anpassen mussten (oder sie versehentlich durch Ändern einiger Einstellungen geändert haben)

Vihung
quelle
6

Nein, da ich nur Versionskontrolldateien habe, die zum Erstellen der Software benötigt werden. Außerdem können einzelne Entwickler ihre eigenen projektspezifischen Einstellungen haben.

John Topley
quelle
5

Nein, ich bin ein starker Maven- Benutzer und verwende das Q for Eclipse- Plugin, mit dem .project und .classpath erstellt und aktualisiert werden. Für andere Dinge wie Einstellungen für Plugins pflege ich normalerweise eine README- oder Wiki-Seite darüber.

Auch diejenigen, mit denen ich gearbeitet habe, bevorzugen andere IDEs. Verwenden Sie einfach die Maven-Plugins, um die Dateien zu generieren, die erforderlich sind, um ihre IDE (und sich selbst) zufrieden zu stellen.

Andreas Holstenson
quelle
5

Ich nehme an, dies ist alles eine Meinung - aber Best Practices im Laufe der Jahre zeigen, dass Dateien, die für eine bestimmte IDE spezifisch sind, nicht in der Quellcodeverwaltung gespeichert werden sollten, es sei denn, Ihre gesamte Organisation ist auf eine IDE standardisiert und Sie haben nie die Absicht, zu wechseln.

In beiden Fällen möchten Sie definitiv nicht, dass Benutzereinstellungen gespeichert werden - und .project kann Einstellungen enthalten, die wirklich entwicklerspezifisch sind.

Ich empfehle die Verwendung von Maven oder Ant als standardisiertes Build-System. Jeder Entwickler kann in wenigen Sekunden einen Klassenpfad in seiner IDE konfigurieren.

Kevin Day
quelle
1

Ja, mit Ausnahme des Ordners .settings. Das Festschreiben der anderen Dateien funktioniert bei uns gut. Es gibt eine ähnliche Frage hier .

Jay R.
quelle
1

Obwohl ich im Allgemeinen dem Ansatz "Nicht versionierte Dateien generieren" zustimme, haben wir Probleme damit und müssen zurückwechseln.

Hinweis: Ich bin auch an der Antwort von VonC interessiert , insbesondere an dem Punkt "Eclipse innerhalb von Minuten einrichten ". Aber es ist für uns nicht entscheidend.

Unser Kontext ist Eclipse + Maven mit dem m2eclipse-Plug-In. Wir haben eine gemeinsame Entwicklungsumgebung mit möglichst vielen gemeinsamen Verzeichnissen. Aber es kommt manchmal vor, dass jemand ein Plug-In ausprobiert, kleine Änderungen an der Konfiguration vornimmt oder einen zweiten Arbeitsbereich für einen anderen Zweig importiert ...

Unser Problem ist, dass die Generierung von .project beim Importieren eines Projekts in Eclipse erfolgt, später jedoch nicht in allen Fällen aktualisiert wird . Es ist traurig und wahrscheinlich nicht dauerhaft, da sich das m2eclipse-Plug-In verbessern wird, aber es ist jetzt wahr. Wir haben also unterschiedliche Konfigurationen. Was wir heute hatten, war das: Mehrere Naturen wurden zu vielen Projekten auf einer Maschine hinzugefügt, die sich dann sehr unterschiedlich verhielten :-(

Die einzige Lösung besteht darin, die .project-Datei zu versionieren (um Risiken zu vermeiden, machen wir dasselbe für .classpath und .settings). Auf diese Weise werden die lokalen Dateien mit m2eclipse aktualisiert, wenn ein Entwickler seinen POM ändert, alle werden zusammen festgeschrieben, und andere Entwickler sehen alle Änderungen.

Hinweis: In unserem Fall verwenden wir relative Dateinamen, sodass wir diese Dateien problemlos freigeben können.

Um Ihre Frage zu beantworten, sage ich ja, schreiben Sie diese Dateien fest.


Ich mochte auch:

KLE
quelle
"... ändert ihren Pom mit m2eclipse ..."? Was hat m2eclipse mit der POM-Datei zu tun? Sicherlich wird es verwendet, aber Änderungen am POM sollten unabhängig vom Plugin sein.
RHSeeger
@RHSeeger Danke, ich werde die Klarheit in diesem Teil meiner Antwort verbessern.
KLE
0

Es scheint, dass sich diese Projektdateien im Laufe der Zeit ändern können, wenn Sie an einem Projekt arbeiten. Ja, ich stelle sie unter Versionskontrolle.

dbrien
quelle
0

Ja. Alles andere als Ausgabe erstellen.

nitind
quelle
0

Wir verwenden IntelliJ IDEA und halten '.sample'-Versionen der Projekt- (.ipr) und Moduldateien (.iml) unter Versionskontrolle.

Etwas Größeres ist hier das Teilen und Wiederverwenden als die Versionierung, IMHO. Wenn Sie diese Konfigurationen jedoch gemeinsam nutzen möchten, gibt es keinen besseren Ort, um sie zu platzieren als das Repository direkt neben allem anderen.

Einige Vorteile von freigegebenen und versionierten Projektdateien:

  • Sie können jedes Tag / jeden Zweig auschecken und schnell daran arbeiten
  • Erleichtert es einem neuen Entwickler, zuerst die Entwicklungsumgebung einzurichten und sich auf den neuesten Stand zu bringen
  • Dies haftet besser auf DRY, was immer zutiefst befriedigend ist. Zuvor mussten alle Entwickler diese Dinge von Zeit zu Zeit einrichten und im Wesentlichen wiederholte Arbeiten ausführen. Natürlich hatte jeder seine eigenen kleinen Möglichkeiten, sich nicht zu wiederholen, aber wenn man das Team als Ganzes betrachtete, gab es viele doppelte Anstrengungen.

Beachten Sie, dass diese Dateien in IDEA folgende Konfigurationen enthalten: Was sind die Verzeichnisse "Quelle" und "Testquelle"? alles über externe Abhängigkeiten (wo befinden sich Bibliotheksgläser sowie verwandte Quellen oder Javadocs); Build - Optionen, etc. Dies ist Sachen , die sich nicht vom Entwickler zu Entwickler variieren (ich nicht einverstanden dies sehr stark). IDEA speichert an anderer Stelle mehr persönliche IDE-Einstellungen sowie alle Plugin-Konfigurationen. (Ich kenne Eclipse nicht so gut; das kann ganz anders sein oder auch nicht.)

Ich stimme dieser Antwort zu , die besagt:

Sie müssen in der Lage sein, ein Projekt in einen Arbeitsbereich zu laden und alles zu haben, was Sie benötigen, um es ordnungsgemäß in Ihrer IDE einzurichten und in wenigen Minuten loszulegen. [...] Laden Sie es auf, richten Sie es ein, gehen Sie.

Und wir haben es dank versionierter Projektdateien so.

Jonik
quelle