2009-10-11 3 views
27

Ich schaute auf eine Open-Source-Mac-Anwendung, und sie gaben einige empfohlene Werte für .gitignore. Sie waren, was ich erwarten würde ...Git und pbxproj

sie jedoch auch vorgeschlagen, einen Eintrag in eine Datei .gitattributes:

*.pbxproj -crlf -diff -merge

Ich bin nicht die meisten kenntnisreich in Bezug auf git, also war ich frage mich - was genau sind die Vorteile der Zugabe dieser Linie? Was macht insbesondere? Ich habe nur das in dieser one project vorgeschlagen gesehen, und wenn es normale Praxis war, hätte ich erwartet, es jetzt woanders zu sehen. Also war ich neugierig, wie es speziell auf die pbxproj-Datei zutrifft.

+0

Der Beitrag http://stackoverflow.com/questions/2615378/how-to-use-git-properly-with-xcode fördert das Zusammenführen von '.pbxproj'-Dateien. – Besi

Antwort

25

Die pbxproj-Datei ist nicht wirklich menschlich mergable. Während es sich um einfachen ASCII-Text handelt, handelt es sich um eine Form von JSON. Im Wesentlichen möchten Sie es als eine Binärdatei behandeln.

Hier ist, was die einzelnen Flaggen tun:

-crlf: Benutzen Sie nicht crlf < => cr Umwandlung

-diff: Sie diff die Datei nicht

-merge: versuchen Sie nicht, fusionieren die Datei

vom Pro Git Buch von Scott Chacon

Einige Dateien sehen wie Textdateien aus, aber sind für alle Absichten und Zwecke , die als Binärdaten behandelt werden. Zum Beispiel Xcode-Projekte auf dem Mac eine Datei enthalten, die in .pbxproj endet, die im Grunde eine JSON (Klartext JavaScript-Datenformat) ist Dataset von dem IDE auf der Festplatte geschrieben, die speichert Ihre Einstellungen zu bauen und so auf. Obwohl es technisch gesehen eine Textdatei, , weil es alle ASCII ist, Sie nicht wollen, es als solches zu behandeln, weil es wirklich eine leichte Datenbank ist - Sie den Inhalt nicht fusionieren kann, wenn zwei Menschen es geändert und diffs in der Regel sind nicht hilfreich. Die Datei soll von einer Maschine verbraucht werden. Im Wesentlichen möchten Sie es wie eine Binärdatei behandeln.

+0

'-crlf' ist kein" strip crlf characters "aber ** do not ** (die Option ist negiert) benutze crlf conversion (crlf <-> cr) für diese Datei. –

+11

In meiner (zugegebenermaßen etwas eingeschränkten) Erfahrung können sehr einfache Änderungen (wie das Hinzufügen einer neuen Datei) normalerweise in einer .pbxproj-Datei zusammengeführt werden. Wenn Sie etwas komplizierteres tun, wie ein Zweig eine Datei hinzufügen und einen anderen Ihre Quellgruppen neu anordnen, dann erhalten Sie normalerweise eine beschädigte .pbxproj, aber für einfache Sachen ist es oft machbar. Ich bin unschlüssig, ob es besser ist, .pbxproj-Dateien als Binärdateien zu behandeln oder nicht. –

+1

Ich stimme zu, ich hatte gute Erfolge bei der Zusammenführung von .pbxproj-Dateien mit Perforce. Ich passte gut auf und ging jede Änderung gründlich durch. Es braucht Zeit, aber es ist sicherlich machbar. Bisher habe ich keine korrupte Projektdatei gefunden. Aber ich wusste auch, welche Veränderungen ich gemacht habe, und ich integriere mich nur in eine Richtung (einfach nicht alles integrieren). – LearnCocos2D

6

Ein Diff ist oft nützlich, um zu überprüfen, was geändert wurde. Daher halte ich es für sinnvoll, die Diffing-Fähigkeit beizubehalten, aber nur das Zusammenführen zu verhindern. So verwende ich in meiner .gitattributes Datei:

* .pbxproj -crlf -merge

Auf einer anderen Anmerkung, hat jemand versucht, mit verschmelzen = Vereinigung für pbxproj Dateien? Siehe: Should I merge .pbxproj files with git using merge=union?

3

Ich schrieb ein Python-Skript mit dem Namen xUnique, um dieses Problem zu beheben.

Dieses Skript tun folgende Dinge:

  • alle 24 Zeichen ersetzen UUID zu projizieren weit eindeutige 32 Zeichen MD5-Prüfsummen, und entfernen Sie alle nicht verwendeten UUID (in der Regel durch unvorsichtige merge verursacht vor). Dies würde doppelte UUIDs verhindern, da verschiedene Maschinen/Xcode unterschiedliche UUIDs in dieser Datei erzeugen. Xcode erkennt es und das Projekt konnte geöffnet werden. Entfernen Sie während dieses Vorgangs alle ungültigen Zeilen in der Projektdatei
  • , um die Projektdatei zu sortieren. Ich schrieb ein python version von sort-Xcode-project-file from Webkit team mit mehr neuen Funktionen:
    • Unterstützung PBXFileReference und PBXBuildFile Abschnitte
    • Entfernen dupliziert Dateien/refs
    • avoid neue Datei zu erstellen, selbst zu sortieren, wenn keine Änderungen vorgenommen, das macht weniger Commits nach der Verwendung dieses Skript

Mehr Details und Updates von xUnique finden Sie in README