Welche Eclipse-Dateien gehören zur Versionskontrolle?

242

Welche Eclipse-Dateien sollten neben den Quellen offensichtlich unter Quellcodeverwaltung gestellt werden?

In meinem Projekt wundere ich mich speziell über:

.metadata / *
project-dir / .project
project-dir / .classpath
project-dir / .settings / *

Wenn es eines davon gibt, von dem es abhängt, erläutern Sie bitte Ihre Richtlinien.

sblundy
quelle

Antworten:

175

Metadaten sollten nicht in der Quellcodeverwaltung verwaltet werden. Sie enthalten hauptsächlich Daten, die für Ihren Arbeitsbereich relevant sind .

Die einzige Ausnahme bilden die .launchXML-Dateien (Launcher-Definition).

Sie sind in gefunden

[eclipse-workspace]\.metadata\.plugins\org.eclipse.debug.core\.launches

Und sie sollten in Ihr Projektverzeichnis kopiert werden: Wenn Ihr Projekt aktualisiert wird, werden diese Konfigurationen im Dialogfeld "Konfiguration ausführen" angezeigt.

Auf diese Weise können diese Startparameterdateien auch im SCM verwaltet werden.

(Achtung: Do Deaktivieren Sie die Option „Löschen - Konfigurationen , wenn zugehörige Ressource wird gelöscht“ im Run / Starten / Startkonfiguration Einstellungsfenster: Es ist üblich , zu weich löschen ein Projekt , um es wieder zu importieren - zu zwingen , eine Re - Initialisierung der Eclipse-Metadaten. Wenn diese Option aktiviert ist, werden Ihre detaillierten Startparameter entfernt!)

project-dir/.project
project-dir/.classpath
project-dir/.settings/* 

sollte sich in Ihrem SCM befinden (insbesondere .projectund .classpathgemäß der Eclipse-Dokumentation ).

Das Ziel ist, dass jeder seinen SCM-Arbeitsbereich auschecken / aktualisieren und das Eclipse-Projekt in den Eclipse-Arbeitsbereich importieren kann.

Dazu möchten Sie nur relative Pfade in Ihrem .classpath verwenden und verknüpfte Ressourcen verwenden .

Hinweis: Es ist besser, wenn project-dirauf ein "externes" Projektverzeichnis verwiesen wird, nicht auf ein Verzeichnis, das unter dem Eclipse-Arbeitsbereich erstellt wurde. Auf diese Weise werden die beiden Begriffe (Eclipse-Arbeitsbereich vs. SCM-Arbeitsbereich) klar voneinander getrennt.


Wie ipsquiggle im Kommentar erwähnt und wie ich in einer alten Antwort angedeutet habe , können Sie die Startkonfiguration tatsächlich als freigegebene Datei direkt in Ihrem Projektverzeichnis speichern . Alle Startkonfigurationen können dann wie die anderen Projektdateien versioniert werden.

(Aus dem Blog-Beitrag Tipp: Erstellen und Freigeben von Startkonfigurationen von KD)

Alt-Text

VonC
quelle
16
Ein (IMO) viel besserer Arbeitsablauf für die Arbeit mit .metadaten für die .launch-Dateien ist: Wenn Sie eine Startkonfiguration bearbeiten common, wählen Sie auf der Registerkarte Save as > shared file. Dadurch wird es direkt im Projektordner abgelegt, sodass es mit dem Rest des Projekts SCM-fähig sein kann.
Ipsquiggle
3
Warum sollte .project in SCM sein? Zum Beispiel möchte ich ein Code-Metrik-Tool verwenden, das bei Aktivierung Änderungen in .project verursacht. Ich möchte das nicht allen Benutzern des Projekts aufzwingen.
jfritz42
8
@ jfritz42: Wenn Sie eine lokale und pünktliche Änderung vornehmen, die nur für Sie gültig ist, lassen Sie diese Version .projectvorerst nur für Ihren Arbeitsbereich ignorieren. Entziehen Sie jedoch nicht allen anderen Benutzern die allgemeine Eclipse-Projektdefinition, die sie schnell in ihren Eclipse-Arbeitsbereich importieren können, nur weil Sie zufällig eine zusätzliche Definition haben, die nur Ihren aktuellen Anforderungen entspricht.
VonC
7
Danke dir. Ich werde diese Links sorgfältig studieren, aber ich stelle bereits fest, dass im ersten Ihrer Links eine Antwort mit "Definitiv ja" beginnt, während die nächste mit "Definitiv nein" beginnt. Google ist voll von unterschiedlichen, für Neulinge unfreundlichen Ratschlägen. Ich verstehe das Ziel, aber wie man dorthin kommt, ist das Problem. Ich komme von Xcode, wo Quell- und Benutzeroptionen sauber von Xcode-generierten und Compiler-generierten Ausgaben getrennt sind, sodass diese Frage eine einfache Antwort hat. Für den Eclipse-Neuling scheint es, dass diese Dateien miteinander vermischt und verstreut sind. Ich suche eine einfache verständliche Antwort
Garyp
3
Ich komme aus dem VisualStudio-Land und stelle @garyp hier an zweiter Stelle - das ist wirklich ein heißes Durcheinander - wenn Eclipse temporäre und / oder nicht nachverfolgbare Dateien pro Benutzer erstellen muss, sollte es sie an einer anderen Stelle ablegen, damit Die Projekt- und Builddefinitionen können nachverfolgt werden, und der gesamte temporäre Müll wird nicht gestört. Gibt es nicht irgendwo mehr offizielle Anleitungen vom Eclipse-Team? (Es ist ziemlich klar, dass das Eclipse-Team keinen Unit-Test durchführt [oder wenn doch, machen sie es nicht effektiv], aber sagen Sie mir zumindest, dass sie die Quellcodeverwaltung verwenden! XD)
BrainSlugs83
19

Ich arbeite derzeit an einem Projekt, bei dem wir die Dateien .project und .cproject unter Quellcodeverwaltung haben. Die Idee war, dass sich Einstellungen in Bezug auf Bibliothekspfade und Linkanweisungen im gesamten Team verbreiten würden.

In der Praxis hat es nicht sehr gut funktioniert. Zusammenführungen treten fast immer in einem Konfliktzustand auf, der außerhalb der Sonnenfinsternis dekonfliktiert werden muss. Anschließend wurde das Projekt geschlossen und erneut geöffnet, damit die Änderungen wirksam werden.

Ich würde nicht empfehlen, sie in der Quellcodeverwaltung zu belassen.

pdemarest
quelle
14

Es ist nichts wert, dass CDT- Konfigurationsdateien nicht für die Quellcodeverwaltung geeignet sind. Es wurde ein Fehler für .cproject-Dateien gemeldet, die sich sehr häufig ändern und Konflikte verursachen. Siehe Das Freigeben von cdt-Projektdateien im Repository führt immer zu Konflikten .

Diaa Sami
quelle
Huch - dieser Fehler ist sechs Jahre alt und immer noch nicht berührt. Die Unterstützung der Quellcodeverwaltung hat für das Eclipse-Team eindeutig keine Priorität!
BrainSlugs83
2
Es sollte auch beachtet werden, dass die .cproject-Datei Konfigurationsinformationen enthält, die Sie anderen Entwicklern nicht erzwingen möchten, manuell neu erstellen zu müssen. Pfui.
Christopher Barber
7

Einige Projekte, wie die, die Maven verwenden, generieren die .project-Dateien gerne basierend auf POMs.

Davon abgesehen sollten .metadata NICHT in der Quellcodeverwaltung sein. Ihr Projekt muss eine Entscheidung darüber treffen, ob projectdir / .settings dies tut, basierend darauf, wie Sie Standards und dergleichen verwalten möchten. Wenn Sie Ihren Entwicklern ehrlich vertrauen können, dass sie ihre Umgebung basierend auf dem Standard einrichten, und Sie für kein Projekt etwas Besonderes anpassen müssen, müssen Sie sie nicht einfügen. Ich empfehle, jedes Projekt speziell zu konfigurieren . Auf diese Weise können Entwickler an mehreren Projekten im selben Arbeitsbereich arbeiten, ohne die Standardeinstellungen hin und her ändern zu müssen. Dadurch werden die Einstellungen sehr explizit und überschreiben alle Standardeinstellungen, die den Projektstandards entsprechen.

Der einzige schwierige Teil ist es, sicherzustellen, dass alle synchron bleiben. In den meisten Fällen können Sie die .settings-Dateien jedoch von Projekt zu Projekt kopieren. Wenn es irgendwelche gibt, die Sie speziell in der Quellcodeverwaltung nicht möchten, führen Sie das Äquivalent der Einstellung svn: ignore für sie aus, wenn Ihr SCM dies unterstützt.

John Stoneham
quelle
2
Wir verwenden Maven 1 und 2 und es generiert die .project-Datei nur, wenn Sie dazu aufgefordert werden. Und selbst wenn Sie dies tun, basiert dies auf dem Inhalt des POM. Wenn also ein anderer Entwickler diesen Schritt bereits für Sie ausgeführt und das Ergebnis in die Versionskontrolle eingecheckt hat, warum nicht davon profitieren?
Andrew Swan
6

Die .classpath-Datei ist definitiv ein guter Kandidat für das Einchecken in scm, da das manuelle Festlegen eine Menge Arbeit bedeuten kann und für neue Entwickler schwierig sein wird, in das Projekt einzusteigen. Es ist wahr, dass es aus anderen Quellen generiert werden kann. In diesem Fall würden Sie die andere Quelle einchecken.

Die Einstellungen hängen von den Einstellungen ab. Dies ist eine Grauzone, aber einige Einstellungen sind fast obligatorisch und es ist praktisch, ein Projekt auschecken, in Eclipse importieren und alles einrichten und loslegen zu können.

In unserem Projekt verwalten wir daher eine Kopie des Ordners .settings mit dem Namen CVS.settings und haben eine Ameisenaufgabe, ihn in .settings zu kopieren. Wenn Sie das Projekt von CVS erhalten, rufen Sie die Aufgabe 'eclipsify' ant auf, um die Standardeinstellungen in den neuen Ordner .settings zu kopieren. Wenn Sie Einstellungen konfigurieren, die von allen Entwicklern des Projekts benötigt werden, führen Sie diese wieder in den Ordner CVS.settings ein und übergeben Sie diese an CVS. Auf diese Weise wird das Speichern von Einstellungen in SCM zu einem bewussten Prozess. Entwickler müssen diese Einstellungen von Zeit zu Zeit wieder in ihren .settings-Ordnern zusammenführen, wenn große Änderungen eingecheckt werden. Aber es ist ein einfaches System, das überraschend gut funktioniert.

Stijn de Witt
quelle
4

Ich würde keinen von ihnen sagen. Sie enthalten höchstwahrscheinlich Informationen, die nur für Ihre Workstation relevant sind (ich denke über Pfade für Bibliotheken und alle nach). Was ist auch, wenn jemand in Ihrem Team Eclipse nicht verwendet?

agnul
quelle
3
Nein, Sie können relative Pfade in Ihrem .classpath haben. Siehe stackoverflow.com/questions/300328#300346 .
VonC
7
Klingt nach einem ziemlich inkohärenten / ineffizienten Team, wenn sie nicht denselben Entwickler verwenden. Tools, Projekt-, Debug- und Build-Definitionen usw. - Als Nächstes werden Sie mir sagen, dass ich keinen gemeinsamen Codierungsstandard oder JDK verwenden soll. - Idealerweise sollte ein Benutzer in der Lage sein, ein Projekt aus der Quellcodeverwaltung abzurufen und ohne viele zusätzliche Einstellungen oder Anweisungen direkt einzuspringen. Diese Antwort ist für mich einfach inakzeptabel.
BrainSlugs83
1
Es ist weitaus ineffizienter, die Konflikte in den Einstellungsdateien während einer Zusammenführung zu behandeln, nur weil jemand das Projekt von einem neuen Arbeitsbereich aus geöffnet hat - dies ist ein Albtraum in großen Projekten. Außerdem klingt das Erzwingen der Verwendung derselben IDE mit genau derselben Konfiguration nach einer unnötigen Einschränkung.
A. Rodas
Ich stimme [~ agnul] zu. Projekte sollten ein Build-Tool (Gradle, Maven, Ant usw.) verwenden und die IDE sollte in der Lage sein, das Projekt über die Konfigurationsdatei des Build-Tools (build.gradle, pom.xml, build.xml, etc ...) Keine IDE-Dateien sollten versioniert werden. Dies sind alles entwicklerspezifische Dateien, keine projektspezifischen Dateien. Sie gehören einfach nicht in die Versionskontrolle.
Axiopistie
2

Erwägen:

.classpath
.project
.launch

Diese sollten in der Versionskontrolle sein, solange Sie sich an projektbezogene Pfade halten. Auf diese Weise können andere Entwickler das Projekt auschecken und sofort mit der Arbeit beginnen, ohne all die Setup-Probleme durchmachen zu müssen, die auch andere Entwickler durchgemacht haben.

Sie könnten versucht sein, .metadata auch in die Versionskontrolle einzubeziehen, damit Eclipse-Entwickler einen gesamten Arbeitsbereich auschecken und ihn mit den richtigen Projekten vorkonfigurieren lassen können. Er enthält jedoch viele benutzerspezifische Informationen, die jederzeit bearbeitet werden können ändern, so würde ich raten, .metadata NICHT einzuschließen. Es ist einfach, einen lokalen Arbeitsbereich zu erstellen, indem Sie alle vorhandenen Eclipse-Projekte importieren.

Alex McCarrier
quelle
Nach meiner Erfahrung kann dies auf verschiedene Weise auftreten, wenn Sie Eclipse auf eine neuere Version aktualisieren oder zwischen verschiedenen Varianten wechseln.
Thorbjørn Ravn Andersen
1

Ich habe zu viele Stunden damit verbracht, die Einstellungen für den Eclipse-Arbeitsbereich für neue Kollegen (und mich selbst) zu konfigurieren. Am Ende habe ich schließlich meine eigenen Metadaten auf den neuen Entwicklercomputer kopiert.

Wenn Sie in einem Team arbeiten, sind die folgenden Kandidaten meiner Meinung nach sehr gute Kandidaten, um die Versionskontrolle zu behalten:

  • Installierte JREs und ihre Namen
  • Server-Laufzeitumgebungen
  • Java Editor-Vorlagen
  • Tastaturkürzel für die Versionskontrolle
  • Plugin-Einstellungen, die keine projektspezifischen Einstellungen bieten
  • Maven-Einstellungen
  • Vorkonfigurierte Perspektiven
  • ...
Reto Höhener
quelle