Sollten * .xccheckout-Dateien in Xcode5 unter VCS ignoriert werden?

157

Apple hat in Xcode 5 einen neuen projektbezogenen Dateityp eingeführt: "xccheckout".

Diese Datei befindet sich im Verzeichnis ".xcodeproj / project.xcworkspace / xcshareddata /" und scheint mit dem Versionskontrollsystem des Projekts in Beziehung zu stehen.

Eine Beispieldatei finden Sie hier: http://pastebin.com/5EP63iRa

Ich nehme an, dass dieser Dateityp unter VCS ignoriert werden sollte, bin mir aber nicht sicher.

Also hier sind die Fragen:

  1. Sollte "xccheckout" ignoriert werden?
  2. Was ist seine Aufgabe?
Artem Abramov
quelle
Diese Frage ist in der Regel sehr relevant. Daher möchte ich, dass es grammatikalisch und syntaktisch korrekter ist. Wenn Sie Englisch als Muttersprache sprechen oder sehr gute Englischkenntnisse haben, möchte ich Sie um Hilfe bei der Überprüfung meiner Sprache bitten. Danke dir!
Artem Abramov
1
Kleinere Änderungsvorschläge: "Apple hat eine neue eingeführt", "Eine Beispieldatei ist hier:". Es gibt ein nicht übereinstimmendes Zitat in Frage 1.
Sofi Software LLC
3
Ich beziehe mich immer auf das Github / Gitignore-Repo, um zu wissen, welche Dateien ignoriert werden sollten -> github.com/github/gitignore/blob/master/Objective-C.gitignore
eliocs

Antworten:

109

Sie sollten eine Xcode 5- .xccheckoutDatei einchecken . Im Allgemeinen sollten Dateien in xcshareddatafestgeschrieben werden.

Eine .xccheckoutDatei enthält Metadaten darüber, welche Repositorys in einem Arbeitsbereich verwendet werden. Für ein einzelnes Projekt in einem einzelnen Repository macht das keinen großen Unterschied. Wenn Sie jedoch einen Arbeitsbereich verwenden, der mehrere Projekte aus verschiedenen Repositorys enthält, .xccheckoutkann Xcode durch das Vorhandensein einer Datei im Arbeitsbereich erkennen, welche Komponenten einen Arbeitsbereich ausmachen und wo sie abgerufen werden können.

Chris Hanson
quelle
8
Wenn es nicht für die gemeinsame Nutzung gedacht war, würde Apple es speichern, .xcuserdatasodass es enthalten sein sollte.
Joshcodes
4
Wie ich in meiner Antwort sagte, enthält die xccheckout-Datei Informationen für alle in einem Arbeitsbereich verwendeten Repositorys. Dies ist unabhängig von dem verwendeten SCM-System der Fall. Ein solcher Arbeitsbereich kann sich in svn oder git befinden, und seine Projekte können sich in einer Mischung aus svn- und git-Repositorys befinden.
Chris Hanson
72
Es sieht so aus, als ob xccheckout Schlüssel und Namen enthält, die für jeden Entwicklercomputer spezifisch sind ... Sobald ich xcode ausführe, werden einige Schlüssel in der Datei geändert und etwas namens IDESourceControlWCCName von <string> OurCompanyAPI </ string> in <string geändert > our_company_api / string> - Letzteres ist der Name, den ich beim Klonen des Repos verwendet habe. Wenn diese Datei freigegeben werden soll, hat Apple einen ziemlich schlechten Job gemacht.
Herr Grumps
7
Wenn wir diese Datei einchecken, erhalten alle meine Mitarbeiter einen anderen IDESourceControlProjectIdentifier ... sodass unser .xccheckout bei jedem Commit geändert wird. -_-
Cœur
9
Unabhängig davon, wofür Apple ursprünglich gedacht war, verursachen die .xccheckoutDateien einige verrückte Probleme in Xcode 6 Beta, und ich habe beschlossen, sie aus VCS zu entfernen. Scheint mit einem Caching-Fehler verbunden zu sein, und ich glaube, Xcode kann sie jedes Mal automatisch aus VCS neu generieren.
Eonil
63

Die *.xccheckoutDatei enthält VCS-Metadaten und sollte daher nicht in das VCS eingecheckt werden.

Auf der anderen Seite: Das Einchecken in diese Datei führt wahrscheinlich nicht zu Zusammenführungsschwierigkeiten oder anderen Problemen.

Wenn Sie diese Datei ignorieren möchten (was ich empfehle), sollten Sie diese Zeile zu Ihrem Projekt hinzufügen .gitignore:

*.xccheckout

Die Lösung von Abizern funktioniert nicht für Projekte innerhalb eines Arbeitsbereichs. Wenn Sie einen Arbeitsbereich verwenden, lautet der Pfad zur *.xccheckoutDatei wie folgt : <workspace-name>.xcworkspace/xcshareddata/<workspace-name>.xcchekout. Und es ignoriert tatsächlich mehr als Sie möchten.

Bearbeiten: Diese Datei dient zum Verwalten des Xcode-Wissens über die möglicherweise vielen VCS-Systeme in Ihrem Projekt Antwort von Chris Hanson . Für> 99% der Projekte ist die .xccheckout-Datei ein Konfigurations-Overkill.

Berik
quelle
1
Es wäre großartig, wenn Sie diese Aussage erweitern könnten: "Sie ignoriert tatsächlich mehr, als Sie möchten." Insbesondere einige Beispiele für andere Dateien, die sich in diesem Ordner befinden und eingecheckt werden sollten.
Mark Edington
Follow-up: Ich verwende einen .gitignore von Adam aus dieser Frage . Es ist als Kern verfügbar und enthält eine Beschreibung des Inhalts des xcshareddata-Ordners.
Mark Edington
@ Mark : Es ignoriert das project.xcworkspace/. Das mag vorerst ok sein, aber ich würde mich bei neuen Xcode-Versionen nicht darauf verlassen.
Berik
6
Diese Antwort ist falsch und GitHubs Standard .gitignore, den es Entwicklern zur Verfügung stellt, sollte nicht spezifiziert werden*.xccheckout
Chris Hanson
2
Nachdem ich diese Datei seit ihrer Einführung in meine Repos aufgenommen habe, habe ich kürzlich begonnen, sie aus allen meinen Repos zu entfernen. Diese Sache führt ständig zu Zusammenführungskonflikten , hauptsächlich in Projekten, die meine eigenen Frameworks als Submodule enthalten. Und dann bekomme ich nichts aus dieser Datei, da ich git für die Verwaltung von Submodulen verwende. Netter Versuch, Apple, danke, aber nein danke.
Pascal
38

Es hängt davon ab, ob. Die Datei enthält Verweise auf das von Ihnen verwendete Remote-Repository. Wenn Sie ein zentrales VCS wie Perforce oder Subversion verwenden, ist das Remote-Repository aller Benutzer identisch, sodass Sie die Datei einchecken können und sollten.

Wenn Sie ein verteiltes VCS wie Mercurial oder git verwenden, es jedoch so verwenden, als wäre es ein CVCS (mit anderen Worten, jeder hat aus einem freigegebenen Repository direkt in seinen persönlichen Arbeitsbereich auf seinem Computer geklont), möchten Sie es möglicherweise trotzdem überprüfen im.

Wenn Sie jedoch ein DVCS verwenden, bei dem jeder seinen eigenen Remote-Klon hat, z. B. GitHub in seinem Standardverwendungsmuster, möchten Sie diese Datei NICHT einchecken. Wenn Sie dies getan haben, werden Sie in Ihren Pull-Anforderungen nach Ihren Repository-Einstellungen gefragt um in die xccheckout-Datei aller anderen kopiert zu werden, aber Ihre Repository-Einstellungen unterscheiden sich von denen aller anderen, da Sie alle unterschiedliche Remote-Repositorys verwenden.

Tim Band
quelle
1
Diese Antwort scheint mir die beste zu sein. Das Einchecken verursachte unnötige Gespräche über die Unterschiede für unsere Team-Commits. Ich füge .gitignore Folgendes hinzu, um sie fernzuhalten: * / .xcworkspace / xcshareddata / *. Xccheckout Ich verstehe immer noch nicht, warum Apple diese Informationen, die sich sowieso im .git-Ordner befinden, redundant gespeichert hat (meine einzige Vermutung ist dies sorgen dafür, dass die Dinge in VCS konsistent funktionieren)
Juan Carlos Méndez
20

Ja, die Project.xccheckoutDatei sollte in Ihr Repository übernommen werden. Xcode verwendet diese Datei, um anderen, die den Arbeitsbereich öffnen, die gesamte Liste der vom Arbeitsbereich verwendeten Quellcodeverwaltungs-Repositorys und den Speicherort der Arbeitskopie mitzuteilen Verhältnis zum Arbeitsbereich , ob es sich bei diesen Repositorys um Git, SVN oder beides handelt.

Wenn Sie den Arbeitsbereich öffnen, verwendet Xcode die Project.xccheckoutDatei, um den Benutzer darüber zu informieren, dass andere Repositorys Teil des Arbeitsbereichs sind, und fragt, welche ausgecheckt werden sollen. Beim Auschecken zusätzlicher Repositorys platziert Xcode die Arbeitskopien in derselben arbeitsbereichsbezogenen Ordnerstruktur wie beim Project.xccheckoutGenerieren der Datei.

Wie Chris Hanson sagte, spielt es wahrscheinlich keine Rolle für einen Arbeitsbereich mit einem einzigen Repository und einem Projekt, aber für komplexere Angelegenheiten wird es in der Tat sehr praktisch sein.

Weitere Informationen hierzu finden Sie im WWDC 2013-Sitzungsvideo Grundlegendes zur Quellcodeverwaltung in Xcode . Der entsprechende Teil beginnt bei ca. 15 Minuten.

Calrion
quelle
Diese Datei ist nur nützlich, wenn Sie Xcode für SCM verwenden. Andernfalls benötigen Sie diese Datei überhaupt nicht. Und noch weniger, wenn Sie mit Git-Gabeln arbeiten, in diesem Fall ist der Repo-Pfad pro Entwickler eindeutig
Carlos Ricardo
3

Dies ist, was ich in meinem .gitignore für Xcode habe.

#Xcode
*.xcuserstate
project.xcworkspace/
xcuserdata/

Es hält alles, was mit dem lokalen Status der Suche der Projekte für mich zusammenhängt, aus dem Repository heraus.

Die xccheckout-Datei befindet sich hier, sodass sie auf meinem System standardmäßig nicht verfolgt wird.

Xcode ist besser geworden und trennt, was geteilt und was lokal aufbewahrt werden muss. Beispielsweise; Diese Zeilen ignorieren die Standard-Build-Schemata. Dies ist in Ordnung, da Sie bestimmte Build-Schemata als freigegeben markieren können. Sie werden in einem Verzeichnis abgelegt, das nicht ignoriert wird.

Haltepunkte werden ignoriert, aber Sie können bestimmte Haltepunkte als projektübergreifend markieren und sie werden auch in einem Verzeichnis abgelegt, das nicht ignoriert wird.

Abizern
quelle