2010-11-25 3 views
36

Wir haben den Code für eine Eclipse RCP-Anwendung in einem Eclipse-Arbeitsbereich, der mehrere Java-Projekte enthält. Wir verwenden Mercurial mit einem einfachen .hgignore nur * .class (aber das gleiche Problem würde Git betreffen).Was von Eclipse-Projekt .metadata kann ich in Git/Mercurial ignorieren?

Schon eine kleine Änderung am Code kann dazu führen, dass viele der Dateien in .metadata geändert werden.

Ich möchte einige oder alle Metadaten aus der Versionskontrolle ausschließen. Wenn wir es vollständig ausschließen, ist der Arbeitsbereich verloren.

Weiß jemand, was wir sicher ausschließen können? Oder wie können wir es neu erstellen, wenn wir den Code auf einen neuen Computer herunterziehen?

+0

Ist es verständlich, dass Sie den gesamten Eclipse-Arbeitsbereich in einem einzigen Mercurial-Repository speichern? Haben Sie darüber nachgedacht, jedes Projekt in einem Repository zu speichern und sie dann als Unter-Repositories eines Umbrella-Repositorys zu gruppieren, damit Sie sie gemeinsam versionieren können (obwohl ich nicht weiß, ob Eclipse dafür Unterstützung bietet)? –

+0

Es ist ein pluginbasiertes Produkt, und die einzelnen Projekte definieren jeweils ein Plugin. Alle werden zusammen oder das gesamte Produkt benötigt. Daher sind die einzelnen Projekte nur ein Teil des Ganzen, weshalb wir den gesamten Eclipse-Arbeitsbereich in einem einzigen Repository speichern möchten. –

Antwort

15

Die Dateien, die ich persönlich bewusst bin, sind:

  • version.ini (nicht sehr aufregend)
  • .plugins/org.eclipse.jdt.core/variablesAndContainers.dat (Classpath-Variablen)
  • .plugins/org.eclipse.core.resources/.projects/* /. Standort (Projekte im Arbeitsbereich)

Irgendwo, ich habe eine Eclipse-Workspace verwendet für einige Eclipse-bezogenen Tools testen, die recht ist stark abgeholzt, b ut funktioniert. Ich werde sehen, ob ich es ausgraben kann.

+1

Danke! Das hat gerade geklappt. Ich musste auch .metadata \ .plugins \ org.eclipse.core.resources \ .root und .safetable behalten. –

+0

Ich musste auch .metadata/.plugins/org.eclipse.wst.jsdt.core/variablesAndContainers.dat hinzufügen. –

4

Die Metadaten des Arbeitsbereichs sollten wirklich nicht in der Quellcodeverwaltung aufbewahrt werden. Die grundlegende Konfiguration des Arbeitsbereichs kann über eine team project set freigegeben werden.

+0

Danke - sieht vielversprechend aus. Ich werde das ausprobieren. –

+0

Eine Projekt-Set-Datei enthält, welche Projekte ausgecheckt werden sollten und von wo, aber sonst nichts. Nicht, dass ich mit Ihnen nicht übereinstimme - ich denke, die klügste Art zu arbeiten ist, Code und pro-Projekt-Metadaten einzuchecken und die Arbeitsbereiche unter lokaler Kontrolle zu lassen - aber wenn das OP darauf besteht, die Arbeitsplatzkonfiguration zu teilen, wird er wahrscheinlich brauche mehr als eine PSF. –

+0

Tom ist richtig; das hat bei mir nicht funktioniert. Die PSF enthält Verweise auf (ein falsch konfiguriertes und nicht vorhandenes) CVS-Repository, zu dem ich natürlich keine Verbindung herstellen kann. –

4

Ich behalten routinemäßig .project und .classpath, sind nicht nur sicher für Git aber nützlich.

.class und .settings sind in meinem gitignore. Diese sind generiert bzw. personenspezifisch.

+1

Es scheint, Sie sind richtig mit dieser Aussage, aber ich frage mich, warum die Github-Eclipse-Datei ignorieren enthält .project und .classpath – lanoxx

+0

Die Github-Eclipse ignorieren enthält .project (ab sofort, zumindest), nur .cproject. –

50

GitHub ist eine Gemeinschaft „gitignore“ Projekt beibehalten, die Kataloge Dateispezifikationen für Ignoriert für verschiedene Plattformen, Redakteure und Sprachen vorgeschlagen: https://github.com/github/gitignore

Eclipse-Ignoriert sind hier: https://github.com/github/gitignore/blob/master/Global/Eclipse.gitignore

(Wenn andere Dateispezifikationen sind, dass sie wissen sollte, lassen sie sie wissen!)

+6

Ein ausgezeichnetes Projekt! Diese spezielle Ignorierliste hat jedoch zwei Probleme: Erstens ignoriert sie einige Dinge, die Sie definitiv einchecken möchten, wie zum Beispiel .classpath, und zweitens handelt es sich um Dinge innerhalb von Projektverzeichnissen, während das OP einchecken möchte gesamter Arbeitsbereich Wenn Sie diese Liste auf einen Arbeitsbereich angewendet haben, würde sie (glaube ich) das gesamte .metadata-Verzeichnis ignorieren, was einige wichtige Dinge wie die Projekt-.location-Dateien verlieren würde. Wirklich, aber das Problem ist hier Eclipse, die autoritative und abgeleitete Dateien auf sehr wenig hilfreiche Weise vermischt. –

29

Metadaten und Arbeitsbereich

I wou ld teile niemals den Ordner .metadata. In der Tat, es sei denn, Sie haben einen bestimmten Grund, ich würde nicht einmal den Arbeitsbereich Ordner teilen, sondern teilen Sie jedes Projekt separat mit Git. Auf diese Weise der .metadata Ordner wird in den übergeordneten Ordner Ihrer git-Repository immer und Sie nicht darüber nachdenken, ob Sie brauchen, um es zu ignorieren trotzdem:

|-- workspace/ 
| \-- .metadata/ 
| |-- yourProjectOne/ 
| | \-- .git/ 
| | |-- .project 
| | |-- src/ 
| | |-- ... 
| |-- yourProjectTwo/ 
| | \-- .git/ 
| | |-- .project/ 
| | |-- src/ 
| | |-- ... 

Projektspezifische

Sie sollten wahrscheinlich immer teilen Sie die .project Datei und nie .settings/ Dateien. Die .classpath kann von Ihrer Umgebung abhängen, aber ich würde nicht vorschlagen, sie zu teilen, weil es Konflikte verursachen kann (zum Beispiel wenn ein Benutzer openjdk verwendet und der andere sun-jdk verwendet).Das .settings enthält Voreinstellungen und Einstellungen für Eclipse und ändert sich sehr, daher sollte es nicht geteilt werden. Wenn Sie das Projekt korrekt importieren, nachdem Sie es von Git geklont haben, werden Sie auch keine Probleme haben.

Die eclipse documentation besagt Folgendes über die .project Datei:

Der Zweck dieser Datei ist das Projekt selbstbeschreibende, so zu machen, die ein Projekt, das gezippt oder zu einem Server freigegeben werden kann korrekt in einem anderen Arbeitsbereich neu erstellt.

und:

Wenn ein neues Projekt an einer Stelle geschaffen wird, die eine vorhandene Projektbeschreibungsdatei enthält, wird der Inhalt dieser Beschreibungsdatei als Projektbeschreibung geehrt. Eine Ausnahme ist, dass der Projektname in der Datei ignoriert wird, wenn er nicht mit dem Namen des zu erstellenden Projekts übereinstimmt. Wenn die Beschreibungsdatei auf der Festplatte ungültig ist, schlägt die Erstellung des Projekts fehl.

Ich schlage vor, Maven auch zu verwenden, da dies wird Ihnen eine Menge Probleme mit dem Abhängigkeitsmanagement speichern und .classpath

Maven

Der Hauptunterschied mit einem Maven-Projekt ist, dass Sie Importieren Sie das Projekt als Maven -> "Existing Maven Projects" und müssen Sie nur die Dateien pom.xml und .project in git teilen. Eclipse erstellt dann automatisch die .classpath, .settings/ Dateien für Sie. Also müssen Sie sie offensichtlich nicht teilen. Wenn sich etwas in pom.xml ändert, führen Sie einfach Maven -> "Projektkonfiguration aktualisieren" und Maven -> "Abhängigkeiten aktualisieren" aus.

Ohne Maven

Sie sollten teilen sich die .project Datei und nicht die .settings/ Ordner. Sie können sich überlegen, .classpath zu teilen, aber es kann zu Konflikten kommen, wie oben erklärt. Ich würde vorschlagen, es auch nicht zu teilen. Verwenden Sie die Methode unter dem Projekt zu importieren:

Nachdem Sie die git-Repository geklont haben Sie einfach importieren können -> „Vorhandenes Projekt von Workspace“ Sonnenfinsternis wird die .project Datei ehrt, sondern erstellt die .classpath und .settings/ Dateien. Nach dem Import müssen Sie den Klassenpfad manuell von Eclipse konfigurieren (und jedes Mal, wenn Ihr Team eine andere Bibliothek verwenden möchte).

Wenn Sie die .project-Datei nicht teilen, ist es nicht möglich, das Projekt mit Eclipse zu importieren. Sie müssen zuerst ein neues Projekt mit dem Projektassistenten erstellen und dann den Import "Allgemein-> Dateisystem" auswählen, damit alle Dateien in Ihren Arbeitsbereich kopiert werden. Dies ist wahrscheinlich nicht das, was Sie wollen, weil es bedeutet, dass Sie das Git-Repository nicht in den Arbeitsbereich klonen können, Sie müssen es irgendwo anders klonen und dann von dort importieren. Daher sollten Sie die .project-Datei immer teilen.

Bitte lassen Sie einen Kommentar, wenn Sie Vorschläge zu dieser Erklärung haben oder wenn Sie nicht damit einverstanden sind. Ich hoffe, das hilft dem einen oder anderen.

+0

Mit maven und m2e ist es sogar notwendig, das .Projekt zu teilen? – pioto

+1

Sehr nützliche Anleitung. Ich war verwirrt, warum alle gitignore-Datei .project enthalten. Aber nach Ihrer Anweisung entscheide ich mich, .project zu teilen. – einverne