2012-10-10 4 views
15

Ich kann ein Repo erstellen und GitHub/BitBucket Geldbuße für meine eigenen Projekte verwenden. Ich hatte Probleme bei der Zusammenarbeit mit anderen Entwicklern oder beim Versuch, ein Projekt auf GitHub auszuweiten.Best Practices für Xcode + Git für Multi-Entwickler-Projekte

Ich kenne andere Antworten wie Best practices for git repositories on open source projects, aber es gibt OSX/Xcode spezifische Probleme, die ich wissen möchte, wie zu lösen.

  1. .DS_Store Dateien kann ein Schmerz. Sie können .gitignore zu verhindern, aber was passiert, wenn sie bereits enthalten sind, oder ein anderer Entwickler fügt sie wieder durch einen plumpen git Befehl ein?

  2. Die .xcodeproj wird Änderungen an den Verzeichnisnamen und Entwicklerprofilen für die andere Person haben. Was ist der beste Weg um Fusionen durchzuführen oder Konflikte zu vermeiden?

  3. Wenn ich gegabelt oder aus einem Github-Projekt gezogen habe, wie kann ich diese Probleme beseitigen und auch Konflikte bei der Zusammenführung für den Betreuer minimieren?

Wenn die Menschen .gitignore für Xcode erstellt ein Beispiel haben oder Skripte sie ihre repos initialisieren verwenden, um das wäre dann groß!

Antwort

3

Ich werde man versuchen, durch ein:

I. Sie müssen nur git filter-branch verwenden, wenn Sie die Dateien von Ihrer Geschichte vollständig entfernen müssen. Wenn diese Dateien keine Kreditkarten-Informationen enthalten, dann denke ich Folgendes sollte genug sein:

git rm --cached .DS_Store 
git commit -m "{Your message}" 

dann diese Datei zu .gitignore hinzufügen und es begehen.

Dadurch wird das Entfernen der Datei aus dem Repository festgeschrieben, die Datei verbleibt jedoch im Arbeitsverzeichnis. Wenn du es aber drückst und dann jemand anderes diesen Commit ausführt, kann es sein, dass sie ihre Datei entfernt haben, also MUSST du dies mitteilen. Mit der Verpflichtung .gitignore verhindern Sie, dass andere Entwickler diese Datei erneut hinzufügen. Wenn du kein Maintainer bist, dann denke ich nicht, dass du etwas tun solltest, aber behalte dieses Problem dem Betreuer.

II.Ich bin fest davon überzeugt, dass versteckte Dateien jeglicher Art aus diesem Grund meistens nicht in das Repository geladen werden sollten. Daher denke ich, dass Sie das gleiche mit .xcodeproj wie mit .DS_Store tun sollten und setzen Sie es in .gitignore und verpflichten Sie es. .gitignore ist die Ausnahme für die obige Regel.

III. Wenn diese Dateien ordnungsgemäß ignoriert werden, gibt es in Zukunft keine Probleme mit ihnen. Wenn sie bereits im Repo sind und jemand eine solche Säuberung machen möchte, sollte dies vom Betreuer gemacht und im Team kommuniziert werden.

Hoffe, dass hilft!

4

git filter-branch könnte Ihnen helfen, unerwünschte Dateien (.DS_Store-Dateien) aus Ihrem Repository zu entfernen - siehe z.

Wenn ein unbeholfener Git-Commit Dateien hinzugefügt hat, sollten Sie in der Lage sein, die korrigierten Changesets in einem sauberen Repository wiederzugeben.

+0

Dank Stemann. Irgendwelche Gedanken zu den anderen Themen? – Luke

1

Sie haben recht, wenn ein .DS_Store bereits hinzugefügt wird, wird das .gitignore nicht viel helfen, aber ich denke, das ist immer noch eine gute Ressource für Sie und andere.

Wenn ich ein Projekt starte, sehe ich normalerweise list, um zu sehen, ob es ein gutes .gitignore bereits gibt. Genauer gesagt für Sie, this ist eines der Objective-C .gitignore.

Hoffentlich sind diese Ressourcen von Nutzen.

14
  1. Setzen Sie .DS_Store in .gitignore. Fügen Sie dann, falls noch nicht geschehen, .gitignore dem Repo hinzu. (Sie sollten .gitignore nicht ignorieren.) Jetzt ignorieren alle Entwickler .DS_Store Dateien. Wenn Sie dem Repo irrtümlich hinzugefügt wurden, bevor Sie in .gitignore setzen, können Sie sie jetzt entfernen (in einem Commit) und sie sollten draußen bleiben.

  2. Die xcodeproj ist ein Verzeichnis. Die einzige Datei in diesem Verzeichnis, die sich im Repository befinden muss, ist die Datei project.pbxproj. Ich ignoriere generell alle anderen durch diese Zeilen in meinem .gitignore setzen:

    *.xcuserstate 
    project.xcworkspace/ 
    xcuserdata/ 
    

    Sie vermeiden sollten absolute Pfade in Ihren Build-Einstellungen setzen. Verwenden Sie relative Pfade.

    Ihre Debug und Releasebuilds iPhone Developer als Code-Signing-Identität verwendet werden soll, so dass Xcode wird die lokale Entwickler-Profil automatisch auswählen. Wenn Sie einen IPA (für die Verteilung) erstellen möchten, bietet Xcode an, ihn mit einer anderen Identität neu zu signieren. An diesem Punkt können Sie bei Bedarf Ihr Verteilungsprofil auswählen.

  3. Wenn Sie versuchen, ein Projekt von github zu verwenden, das diese Fehler gemacht hat, können Sie versuchen, den Betreuer dazu zu bringen, sie zu beheben, oder Sie können die .DS_Store Dateien und die Codesignatur nicht berühren Identitäten in denselben Commits, die Sie upstream senden möchten.

+2

Wenn diese Antwort richtig ist, sollten Sie wahrscheinlich Ihr Kopfgeld vergeben. – wberry

1

Als Mac-Benutzer, den Sie ein Tool wie SourceTree die Git Flow unterstützt herunterladen sollten. Git Flow wird Ihnen dabei helfen, einige Best Practices dafür zu entwickeln, wie Ihre Mitarbeiter Code für den Repo-Code festlegen und zumindest Zusammenführungskonflikte weniger häufig und leichter zu handhaben machen. Für eine Reihe von Gitignore-Dateien für verschiedene Projekttypen können Sie zu GitHub gehen und einen herunterladen, der bereit ist zu gehen. Für Xcode haben sie es als Objective-C.gitignore aufgeführt. Das ist ein guter Startplatz und deckt sogar Cocoapods ab. Wenn Sie externe Bibliotheken verwenden, sollte Ihr Projekt CocoaPods verwenden, damit Sie diesen Code isolieren können und ihn außerhalb Ihres Repos belassen und git-Submodule vermeiden können.

Wenn Sie jetzt eine Datei finden, die es in Ihren Repo wie .DS_Store geschafft hat, entfernen Sie sie einfach und gehen Sie weiter. Stellen Sie sicher, dass Sie es der .gitignore-Datei hinzufügen, die in das Projekt eingecheckt ist.

Wie für xcodeproj ... sollte nicht so viel Anpassung innerhalb der Datei, die benutzerspezifisch ist, da die oben genannten Gitignore filtert heraus. Wenn ein Schema freigegeben werden soll, stellen Sie sicher, dass Sie unter "Schemata verwalten" die Option "Freigegeben" aktivieren, und Sie werden Dateien in diesem Unterverzeichnis einchecken. Sie sollten die automatische Auswahl von Zertifikaten verwenden, so dass die einzige echte Wahl Entwickler oder Distribution ist.Sie sollten auch die Vorteile der variables provided within Xcode nutzen, die vollständige Pfade hardcoding vermeiden. Wenn Sie versuchen, an ein Beispiel zu denken, kam Plists in den Sinn, in diesem Fall hätten Sie vielleicht /Users/me/MyProject/Resources/MyProject.plist geschrieben, aber stattdessen sollten Sie $(SRCROOT)/resources/MyProject.plist verwenden.

3

Für die zweite Ausgabe bezüglich der .xcodeproj und Zusammenführungskonflikte.

eine .gitattributes Datei verwenden, um festzulegen, dass Konflikte fusionieren für alle .pbxproj Dateien sollten mit der merge=union Strategie behandelt werden, was bedeuten soll, dass Git weiß in den Änderungen von beiden Seiten des Konflikts zu fusionieren, zunächst die Upstream-Änderungen nehmen.

This article explains it in a bit more depth