Was geht in Ihren .gitignore, wenn Sie CocoaPods verwenden?

388

Ich mache jetzt seit ein paar Monaten iOS-Entwicklung und habe gerade von der vielversprechenden CocoaPods- Bibliothek für das Abhängigkeitsmanagement erfahren .

Ich habe es an einem persönlichen Projekt ausprobiert: Kiwi wurde eine Abhängigkeit zu meinem Podfile hinzugefügt, lief pod install CocoaPodsTest.xcodeprojund voila , es hat großartig funktioniert.

Ich frage mich nur noch: Was checke ich ein und was ignoriere ich für die Versionskontrolle? Es scheint offensichtlich, dass ich die Pod-Datei selbst und wahrscheinlich auch die .xcworkspace-Datei einchecken möchte. Aber ignoriere ich das Pods / -Verzeichnis? Gibt es andere Dateien, die später generiert werden (wenn ich andere Abhängigkeiten hinzufüge), die ich auch meinem .gitignore hinzufügen sollte?

Dan Tao
quelle

Antworten:

261

Persönlich überprüfe ich nicht das Pods-Verzeichnis und den Inhalt. Ich kann nicht sagen, dass ich lange Zeit damit verbracht habe, über die Auswirkungen nachzudenken, aber meine Argumentation ist ungefähr so:

Das Podfile bezieht sich auf ein bestimmtes Tag oder / oder Commit jeder Abhängigkeit, sodass die Pods selbst aus dem Podfile generiert werden können. Sie sind also eher ein Zwischenprodukt als eine Quelle und benötigen daher in meinem Projekt keine Versionskontrolle.

Matt Mäher
quelle
70
Es kann erwähnenswert sein, dass das CocoaPods-Projekt das Pods-Verzeichnis im Beispiel ignoriert .
Joshhepworth
34
Ich würde in Betracht ziehen, die Datei Podfile.lock hinzuzufügen, da Sie dann genau aufzeichnen, welche Versionen von Bibliotheken Sie für einen bestimmten Build verwendet haben, und diese für andere Teammitglieder genau reproduzieren können. Die Frage "Welche X-Version verwenden Sie?" Kann sehr ärgerlich sein. Hier ist eine gute Diskussion über das Rubin-Gemfile-Äquivalent: yehudakatz.com/2010/12/16/…
Matt Connolly
12
Ich verstehe nicht, warum Sie das Podfile.lock festschreiben würden. Sollten Sie in Ihrem Podfile nicht genauer angeben, von welchen Versionen Sie abhängig sind? Was verstehe ich nicht?
Michael Baltaks
9
So sehe ich das: Wenn Ihre Poddatei genaue Versionen jedes Pods angibt, besteht die einzige Möglichkeit, Updates zu erhalten, darin, die vorhandenen Updates zu kennen und sie manuell anzugeben. Dies kann für eine beliebte oder geschäftskritische App bevorzugt werden. Für die frühere Entwicklung sind wichtige Updates viel einfacher zu bekommen, wenn Sie Podfile.lock nur diff, wenn es aktualisiert wird, und dann entscheiden, ob Sie die Updates möchten, was Sie wahrscheinlich die meiste Zeit tun.
Davidkovsky
43
Es ist wichtig zu erwähnen Podfile.lock: Es wird von Cocoapods als empfehlenswert bezeichnet, unter Versionskontrolle zu stehen.
cbowns
383

Ich habe mein Pods-Verzeichnis festgeschrieben. Ich bin nicht der Meinung, dass das Pods-Verzeichnis ein Build-Artefakt ist. Tatsächlich würde ich sagen, dass dies definitiv nicht der Fall ist. Es ist Teil Ihrer Anwendungsquelle: Ohne sie wird es nicht erstellt!

Es ist einfacher, sich CocoaPods als Entwicklertool vorzustellen, als als Build-Tool. Es erstellt Ihr Projekt nicht, es klont und installiert einfach Ihre Abhängigkeiten für Sie. Es sollte nicht erforderlich sein, CocoaPods zu installieren, um Ihr Projekt einfach erstellen zu können.

Indem Sie CocoaPods zu einer Abhängigkeit Ihres Builds machen, müssen Sie jetzt sicherstellen, dass es überall verfügbar ist, wo Sie Ihr Projekt erstellen müssen. Ein Teamadministrator benötigt es, Ihr CI-Server benötigt es. Sie sollten in der Regel immer in der Lage sein, Ihr Quell-Repository zu klonen und ohne weiteren Aufwand zu erstellen.

Wenn Sie Ihr Pods-Verzeichnis nicht festschreiben, entstehen Ihnen auch massive Kopfschmerzen, wenn Sie häufig zwischen Zweigen wechseln. Jetzt müssen Sie die Pod-Installation jedes Mal ausführen, wenn Sie die Zweige wechseln, um sicherzustellen, dass Ihre Abhängigkeiten korrekt sind. Dies ist möglicherweise weniger problematisch, da sich Ihre Abhängigkeiten stabilisieren, aber zu Beginn eines Projekts ist dies eine massive Zeitsenke.

Also, was ignoriere ich? Nichts. Podfile, die Sperrdatei und das Pods-Verzeichnis werden festgeschrieben. Vertrauen Sie mir, es wird Ihnen viel Ärger ersparen. Was sind die Nachteile? Ein etwas größeres Repo? Nicht das Ende der Welt.

Luke Redpath
quelle
33
Dies ist definitiv der Weg, um CocoaPods zu verwenden. Es ist nicht nur ein Teil Ihrer Quelle, weil Sie ohne es nicht bauen können, sondern Ihre "Kernanwendung" ist auch häufig stark an Code in CocoaPods gekoppelt. Sehr wichtig für die Versionierung, um genau zu wissen, welche Version eines Pods verwendet wird, und nur Lockfile zu verwenden, schneidet es nicht.
Joshua Gross
35
Einfacher beim Zweigwechsel und in der Zeit zurück… Dies ist ein massives Argument.
MonsieurDart
5
Ja, ich hätte weiter darauf eingehen können, aber für mich stellt ein Commit in Ihrem Repo eine Momentaufnahme Ihrer Quelle dar. Wenn Sie Ihr Pods-Verzeichnis nicht festschreiben, fehlt ein großer Teil dieses Snapshots. Sie können dies abmildern, indem Sie Ihre Pod-Versionen sehr spezifisch festlegen, dies aber auch berücksichtigen. Wenn Sie einen Ihrer Pods aktualisieren, wenn sich Ihre Pods in Ihrem Repo befinden, wird dieses Update in einem Commit erfasst und ist vollständig differenzierbar. Wenn das Aktualisieren eines Pods einen Fehler verursacht, können Sie viel einfacher erkennen, warum die zugrunde liegende Änderung in Ihrem eigenen Repo erfasst wird.
Luke Redpath
5
Ich denke, es ist klar, dass es jetzt eine Frage des persönlichen Geschmacks ist. Leute wie Seamus polarisieren jetzt die Debatte ... es ist wirklich nicht fair zu sagen, dass das Nichteinschließen des PodsVerzeichnisses Ihnen Schmerzen bereiten wird, wenn das Einchecken auch mit einem eigenen Bündel von Problemen verbunden ist. Beispiel: Ein Entwickler stößt eine Version einer Abhängigkeit in a an, Podfileohne daran zu denken, die aktualisierten Quellen in Pods einzuchecken. Murphys Gesetz. pod installJedes Mal, wenn Sie den Zweig wechseln, kostet Sie wertvolle ... ZEHN Sekunden - aber es beseitigt diese Klasse von Problemen insgesamt.
Fatuhoku
14
It won't build without it!Sie können auch XCode festlegen
Sourabh
155

Ich empfehle, den Objective-C-Gitignore von GitHub zu verwenden . Im Detail sind die Best Practices:

  • Das Podfile muss immer unter Quellcodeverwaltung sein.
  • Das Podfile.lock muss immer unter Quellcodeverwaltung sein.
  • Der von CocoaPods generierte Arbeitsbereich sollte unter Quellcodeverwaltung gehalten werden.
  • Jeder Pod, auf den mit der :pathOption verwiesen wird, sollte unter Quellcodeverwaltung gehalten werden.
  • Der ./PodsOrdner kann unter Quellcodeverwaltung gehalten werden.

Weitere Informationen finden Sie im offiziellen Leitfaden .

Quelle: Ich bin Mitglied des CocoaPods-Kernteams wie @alloy


Obwohl der Pods-Ordner ein Build-Artefakt ist, gibt es Gründe, die Sie berücksichtigen sollten, wenn Sie entscheiden, ob Sie ihn unter Quellcodeverwaltung halten möchten:

  • CocoaPods ist kein Paketmanager, daher könnte der Autor die ursprüngliche Quelle der Bibliothek in Zukunft entfernen.
  • Wenn der Pods-Ordner in der Quellcodeverwaltung enthalten ist, muss CocoaPods nicht installiert werden, um das Projekt auszuführen, da das Auschecken ausreichen würde.
  • CocoaPods ist noch in Arbeit und es gibt Optionen, die nicht immer zum gleichen Ergebnis führen (zum Beispiel verwenden die :headund die :gitOptionen derzeit nicht die in der gespeicherten Commits Podfile.lock).
  • Es gibt weniger Fehlerquellen, wenn Sie die Arbeit an einem Projekt nach einer mittleren / langen Zeitspanne wieder aufnehmen können.
Fabio
quelle
5
Warum sollte man sich die Mühe machen, die Arbeitsbereichsdatei zu behalten? Es wird sowieso von Cocoapods generiert.
Fatuhoku
1
@fatuhoku Nach meiner Erfahrung für Cocoapods-blinde Testserver mit kontinuierlicher Integration. Ich checke alles ein, weil ich keinen Zugriff auf das Build-Skript für meinen CI-Host (Geschäftsregel) habe und CocoaPods als Entwicklertool und nicht als Build-System oder Paketmanager behandle.
Codepoet
1
Der Ordner ./Pod sollte NICHT von CocoaPods unter Quellcodeverwaltung gehalten werden (er wird automatisch generiert). Der Pods-Ordner ist ein Artefakt des Erstellungsprozesses. Der Arbeitsbereich kann auch aus der Quellcodeverwaltung entfernt werden, es sei denn, andere Projekte werden nicht mit CocoaPods verwaltet.
Vlad
Ich denke, es sollte eingecheckt werden, da es schwierig ist, jedes Mal, wenn ich einen Pull mache, eine Pod-Installation durchzuführen.
mskw
45

.gitignore-Datei

Keine Antwort bietet tatsächlich eine .gitignore, also hier sind zwei Geschmacksrichtungen.


Einchecken im Pods-Verzeichnis ( Vorteile )

Xcode / iOS-freundliche Git ignorieren, Mac OS-Systemdateien, Xcode, Builds, andere Repositorys und Backups überspringen.

.gitignore:

# Mac OS X Finder
.DS_Store

# Private Keys
*.pem

# Xcode legacy
*.mode1
*.mode1v3
*.mode2v3
*.perspective
*.perspectivev3
*.pbxuser

# Xcode
xcuserdata/
project.xcworkspace/
DerivedData/

# build products
build/
*.[oa]

# repositories
.hg
.svn
CVS

# automatic backup files
*~.nib
*.swp
*~
*(Autosaved).rtfd/
Backup[ ]of[ ]*.pages/
Backup[ ]of[ ]*.key/
Backup[ ]of[ ]*.numbers/

Ignorieren des Pods-Verzeichnisses ( Vorteile )

.gitignore: (an vorherige Liste anhängen)

# Cocoapods
Pods/

Unabhängig davon, ob Sie im Pods-Verzeichnis einchecken oder nicht, sollten Podfile und Podfile.lock immer unter Versionskontrolle gehalten werden.

Wenn Sie Podsnicht eingecheckt sind, Podfilesollten Sie wahrscheinlich explizite Versionsnummern für jeden Cocoapod anfordern. Cocoapods.org Diskussion hier .

SwiftArchitect
quelle
38

Ich arbeite im Allgemeinen an Apps von Kunden. In diesem Fall füge ich das Pods-Verzeichnis ebenfalls zum Repo hinzu, um sicherzustellen, dass jeder Entwickler jederzeit eine Prüfung durchführen und erstellen und ausführen kann.

Wenn es eine eigene App wäre, würde ich wahrscheinlich das Pods-Verzeichnis ausschließen, bis ich eine Weile nicht mehr daran arbeite.

Eigentlich muss ich zu dem Schluss kommen, dass ich möglicherweise nicht die beste Person bin, um Ihre Frage zu beantworten, im Gegensatz zu Ansichten reiner Benutzer :) Ich werde über diese Frage von https://twitter.com/CocoaPodsOrg twittern .

Legierung
quelle
Ich würde das auch wiederholen. Sie können CocoaPods verwenden, ohne dass Ihre anderen Entwickler es verwenden müssen (obwohl sie es sollten), indem Sie im Pods-Ordner nachsehen. Sobald CocoaPods allgegenwärtig werden, ähneln Pods Edelsteinen. Sie checken sie in den gleichen Fällen ein, in denen Sie Rubin-Edelsteine ​​"verkaufen" würden.
Ben Scheirman
2
Ich denke, man muss auch berücksichtigen, dass Pods oder Pod-Dienstprogramme (die gute Version) manchmal nicht verfügbar sind. Wenn zwei Benutzer mit unterschiedlicher Pod-Dienstprogrammversion das Dienstprogramm für genau dieselbe Podspec ausführen, kann sich die Ausgabe unterscheiden.
Adrian
1
Das Auschecken, Erstellen und Ausführen ist die wichtigste Überlegung. Warum sollten Sie Ihren Build und Ihre Fähigkeit zum Bauen von externen Faktoren abhängig machen? Ich checke alle Pods ein. Sie können anderen Entwicklern (oder Ihrem zukünftigen Selbst) Stunden bei der Suche nach den richtigen Pods ersparen. Ich sehe auch keine Nachteile beim Einchecken.
n13
18

Ich checke alles ein. ( Pods/und Podfile.lock.)

Ich möchte in der Lage sein, das Repository zu klonen und zu wissen, dass alles genauso funktioniert wie beim letzten Mal, als ich die App verwendet habe.

Ich würde lieber Dinge verkaufen, als zu riskieren, dass andere Ergebnisse erzielt werden, die durch eine andere Version des Edelsteins verursacht werden könnten, oder dass jemand den Verlauf im Repository des Pods neu schreibt usw.

Funroll
quelle
4
Das andere schöne daran ist, dass Sie nach einem Update vor dem Einchecken den Diff überprüfen und genau sehen können, welche Dateien in den Pods geändert wurden.
Funroll
2
Darüber hinaus müssen für Ihr Projekt nicht alle Entwickler CocoaPods installiert haben (was hilfreich sein kann, wenn Sie steuern möchten, wer / wie Abhängigkeiten hinzugefügt und aktualisiert werden).
Tony Arnold
18

Die Antwort darauf finden Sie direkt in den Cocoapod-Dokumenten. Sie können sich " http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control " ansehen.

Ob Sie Ihren Pods-Ordner einchecken oder nicht, liegt bei Ihnen, da die Workflows von Projekt zu Projekt unterschiedlich sind. Wir empfehlen, dass Sie das Pods-Verzeichnis unter Quellcodeverwaltung halten und es nicht zu Ihrem .gitignore hinzufügen. Aber letztendlich liegt diese Entscheidung bei Ihnen:

Vorteile der Überprüfung im Pods-Verzeichnis

  • Nach dem Klonen des Repos kann das Projekt sofort erstellt und ausgeführt werden, auch ohne dass CocoaPods auf dem Computer installiert sind. Die Pod-Installation muss nicht ausgeführt werden, und es ist keine Internetverbindung erforderlich.
  • Die Pod-Artefakte (Code / Bibliotheken) sind immer verfügbar, auch wenn die Quelle eines Pods (z. B. GitHub) ausfällt.
  • Die Pod-Artefakte sind nach dem Klonen des Repos garantiert identisch mit denen in der Originalinstallation.

Vorteile des Ignorierens des Pods-Verzeichnisses

  • Das Quellcodeverwaltungs-Repo ist kleiner und nimmt weniger Platz ein.

  • Solange die Quellen (z. B. GitHub) für alle Pods verfügbar sind, kann CocoaPods im Allgemeinen dieselbe Installation neu erstellen. (Technisch gibt es keine Garantie dafür, dass durch Ausführen der Pod-Installation identische Artefakte abgerufen und neu erstellt werden, wenn kein Commit-SHA in der Pod-Datei verwendet wird. Dies gilt insbesondere, wenn Zip-Dateien in der Pod-Datei verwendet werden.)

  • Bei der Ausführung von Versionsverwaltungsvorgängen wie dem Zusammenführen von Zweigen mit verschiedenen Pod-Versionen treten keine Konflikte auf.

Unabhängig davon, ob Sie im Pods-Verzeichnis einchecken oder nicht, sollten Podfile und Podfile.lock immer unter Versionskontrolle gehalten werden.

shah1988
quelle
13

Ich bin im Lager der Entwickler, die keine Bibliotheken einchecken, vorausgesetzt, wir haben eine gute Kopie an einem anderen Ort. Daher füge ich in meinen .gitignore die folgenden Zeilen ein, die für CocoaPods spezifisch sind:

Pods/
#Podfile.lock  # changed my mind on Podfile.lock

Dann stelle ich sicher, dass wir eine Kopie der Bibliotheken an einem sicheren Ort haben. Anstatt das Code-Repository eines Projekts (falsch) zum Speichern von Abhängigkeiten (kompiliert oder nicht) zu verwenden, ist es meiner Meinung nach am besten, Builds zu archivieren. Wenn Sie für Ihre Builds einen CI-Server verwenden (z. B. Jenkins), können Sie alle für Sie wichtigen Builds dauerhaft archivieren. Wenn Sie alle Ihre Produktions-Builds in Ihrem lokalen Xcode ausführen, machen Sie es sich zur Gewohnheit, ein Archiv Ihres Projekts für alle Builds zu erstellen, die Sie behalten müssen. So etwas wie: 1. Produkt -> Archiv

  1. Verteilen ... An den iOS App Store senden / Für Unternehmen speichern oder Ad-hoc-Bereitstellung / Was haben Sie?

  2. Zeigen Sie Ihren Projektordner im Finder an

  3. Klicken Sie mit der rechten Maustaste und komprimieren Sie "WhateverProject".

Auf diese Weise erhalten Sie ein erstelltes Image des gesamten Projekts, einschließlich der vollständigen Projekt- und Arbeitsbereichseinstellungen, die zum Erstellen der App verwendet wurden, sowie Binärdistributionen (wie Sparkle, proprietäre SDKs wie TestFlight usw.), unabhängig davon, ob CocoaPods verwendet werden oder nicht.

Update: Ich habe es mir anders überlegt und verpflichte mich jetzt Podfile.lockzur Quellcodeverwaltung. Ich bin jedoch immer noch der Meinung, dass die Pods selbst Build-Artefakte sind und als solche außerhalb der Quellcodeverwaltung durch eine andere Methode wie Ihren CI-Server oder einen Archivierungsprozess wie oben beschrieben verwaltet werden sollten.

Alex Nauda
quelle
23
Cocoapods empfiehlt ausdrücklich das Einchecken Podfile.lock: docs.cocoapods.org/guides/working_with_teams.html
cbowns
Interessant. Da Podfile.lockich Pfade zu lokalen Pods backe, hatte ich nicht daran gedacht, sie der Versionskontrolle hinzuzufügen. Jetzt, wo ich darüber nachdenke, unterscheidet es sich jedoch nicht von den lokalen Änderungen, die ich vornehme, Podfileaber niemals festschreibe. Vielen Dank für den Hinweis.
Alex Nauda
Hat sich die Zusammenarbeit mit Teams geändert? Es wird nichts über die Podfile.lockDatei erwähnt.
Ingh.am
4
@ ing0 Ich denke, der neue Link ist dieser
Phi
Der Vorteil des Eincheckens von Podfile.lock besteht darin, dass es offensichtlich ist, ob Ihre Pods oder deren Abhängigkeiten aktualisiert wurden.
Tim Potter
11

Ich bevorzuge es, ein PodsVerzeichnis zusammen mit Podfileund Podfile.lockum sicherzustellen, dass jeder in meinem Team die Quelle jederzeit auschecken kann und sich um nichts kümmern oder zusätzliche Dinge tun muss, damit es funktioniert.

Dies hilft auch in einem Szenario, in dem Sie einen Fehler in einem der Pods behoben oder ein Verhalten gemäß Ihren Anforderungen geändert haben. Diese Änderungen sind jedoch auf anderen Computern nicht verfügbar, wenn sie nicht festgeschrieben werden.

Und um unnötige Verzeichnisse zu ignorieren:

xcuserdata/
nomann
quelle
10

Ich muss sagen, ich bin ein Fan davon, Pods in das Repository zu schreiben. Wenn Sie einem bereits erwähnten Link folgen, erhalten Sie eine gute .gitignore-Datei, mit der Sie Ihre Xcode-Projekte für iOS aufrufen können, um Pods zuzulassen, aber Sie können sie auch einfach ausschließen, wenn Sie dies wünschen: https://github.com/github/gitignore/ blob / master / Objective-C.gitignore

Meine Argumentation, ein Fan des Hinzufügens von Pods zum Repository zu sein, ist aus einem fundamentalen Grund, den niemand zu verstehen scheint. Was passiert, wenn eine Bibliothek, von der unser Projekt so abhängig ist, plötzlich aus dem Web entfernt wird?

  • Möglicherweise entscheidet der Host, dass er sein GitHub-Konto nicht mehr offen halten möchte. Was passiert, wenn die Bibliothek mehrere Jahre alt ist (z. B. älter als 5 Jahre), besteht ein hohes Risiko, dass das Projekt nicht mehr an der Quelle verfügbar ist
  • Was passiert, wenn sich die URL zum Repository ändert? Nehmen wir an, die Person, die den Pod von ihrem GitHub-Konto aus bedient, beschließt, sich unter einem anderen Handle darzustellen - Ihre Pods-URLs werden beschädigt.
  • Zum Schluss noch ein Punkt. Sagen Sie, wenn Sie ein Entwickler wie ich sind, der auf einem Flug zwischen Ländern viel programmiert. Ich ziehe schnell an der Hauptniederlassung, mache eine Pod-Installation an dieser Niederlassung, während ich auf dem Flughafen sitze, und bereite mich auf den bevorstehenden 8-stündigen Flug vor. Ich habe 3 Stunden Zeit für meinen Flug und stelle fest, dass ich zu einer anderen Filiale wechseln muss ... 'DOH' - fehlende Pod-Informationen, die nur in der 'Master'-Filiale verfügbar sind.

NB ... Bitte beachten Sie, dass der 'Master'-Zweig für die Entwicklung nur Beispiele sind. Offensichtlich sollten' Master'-Zweige in Versionskontrollsystemen jederzeit sauber und bereitstellbar / baubar gehalten werden

Ich denke, aus diesen Gründen sind Snapshots in Ihren Code-Repositorys sicherlich besser als eine strenge Größe des Repositorys. Und wie bereits erwähnt, gibt Ihnen die Datei podfile.lock - während die Versionskontrolle erfolgt - einen guten Verlauf Ihrer Pod-Versionen.

Letztendlich ist Zeit von entscheidender Bedeutung, wenn Sie eine dringende Frist und ein knappes Budget haben. Wir müssen so einfallsreich wie möglich sein und keine Zeit mit strengen Ideologien verschwenden und stattdessen eine Reihe von Tools für die Zusammenarbeit nutzen - um unser Leben effizienter zu gestalten.

leewilson86
quelle
2
Dies ist eine der besten Antworten auf die zeitlose Frage "Überprüfe ich meine Abhängigkeiten in der Quellcodeverwaltung?". Zunächst erläutern Sie eine konkrete, risikobasierte geschäftliche Begründung für Ihre Argumentation. Zweitens erinnern Sie alle daran, dass am Ende des Tages die beste Lösung darin besteht, die Arbeit zu erledigen und die Menschen zur Zusammenarbeit zu bewegen. Sie entfernen die Religion aus der Gleichung. Gut gemacht!
Brandon
8

Am Ende liegt es an Ihnen, welchen Ansatz Sie wählen.

Das denkt das Cocoapods-Team darüber:

Ob Sie Ihren Pods-Ordner einchecken oder nicht, liegt bei Ihnen, da die Workflows von Projekt zu Projekt unterschiedlich sind. Wir empfehlen, dass Sie das Pods-Verzeichnis unter Quellcodeverwaltung halten und es nicht zu Ihrem .gitignore hinzufügen. Aber letztendlich liegt diese Entscheidung bei Ihnen.

Persönlich möchte ich Pods als node_modules fernhalten, wenn ich Node oder bower_components verwende, wenn ich Bower verwende . Dies gilt für fast jeden Abhängigkeitsmanager da draußen und ist auch die Philosophie hinter Git-Submodulen .

Es gibt jedoch manchmal Fälle, in denen Sie sich über den Stand der Technik einer bestimmten Abhängigkeit wirklich sicher sein möchten. Auf diese Weise tragen Sie die Abhängigkeit in Ihrem Projekt. Natürlich gibt es einige Nachteile, die auftreten, wenn Sie dies tun, aber Bedenken gelten nicht nur für Cocoapods, sondern auch für jeden Abhängigkeitsmanager da draußen.

Unten finden Sie eine gute Vor- / Nachteile- Liste des Cocoapods-Teams sowie den vollständigen Text des zuvor erwähnten Zitats.

Cocoapods-Team: Soll ich das Pods-Verzeichnis in die Quellcodeverwaltung einchecken?

Zevarito
quelle
8

Es kommt persönlich darauf an:

Warum Pods Teil des Repos sein sollten (unter Quellcodeverwaltung) und nicht ignoriert werden sollten

  • Die Quelle ist identisch
  • Sie können es sofort so bauen, wie es ist (auch ohne die Cocoapods).
  • Selbst wenn ein Pod gelöscht wird, haben wir immer noch seine Kopie (Ja, das kann passieren und es ist passiert. In einem alten Projekt, in dem Sie nur eine kleine Änderung wünschen, müssten Sie eine neue Bibliothek implementieren, um überhaupt erstellen zu können).
  • pods.xcodeprojEinstellungen sind ebenfalls Teil der Quellcodeverwaltung. Dies bedeutet , dass diese Einstellungen gespeichert werden, wenn Sie beispielsweise das Projekt in haben swift 4, aber einige Pods in sein müssen, swift 3.2da sie noch nicht aktualisiert wurden. Andernfalls würde derjenige, der das Repo geklont hat, Fehler haben.
  • Sie können Pods jederzeit aus dem Projekt löschen und ausführen pod install, das Gegenteil ist nicht möglich.
  • Sogar die Autoren der Cocoapods empfehlen es.

Einige Nachteile: größeres Repository, verwirrende Unterschiede (hauptsächlich für Teammitglieder), möglicherweise mehr Konflikte.

Jakub Truhlář
quelle
2

Für mich ist die größte Sorge die Zukunftssicherung Ihrer Quelle. Wenn Sie vorhaben, dass Ihr Projekt eine Weile dauert und CocoaPods jemals verschwinden oder die Quelle eines der Pods ausfällt, haben Sie kein Glück, wenn Sie versuchen, frisch aus einem Archiv zu erstellen.

Dies könnte durch regelmäßige vollständige Quellarchive gemildert werden.

Shawn
quelle
2

Überprüfen Sie die Pods.

Ich denke, dies sollte ein Grundsatz der Softwareentwicklung sein

  • Alle Builds müssen reproduzierbar sein
  • Die einzige Möglichkeit, um sicherzustellen, dass Builds reproduzierbar sind, besteht darin, alle Abhängigkeiten zu kontrollieren. Das Einchecken aller Abhängigkeiten ist daher ein Muss.
  • Ein neuer Entwickler, der von vorne anfängt, kann Ihr Projekt überprüfen und mit der Arbeit beginnen.

Warum?

CocoaPods oder andere externe Bibliotheken können sich ändern, was zu Problemen führen kann. Oder sie können verschoben oder umbenannt oder ganz entfernt werden. Sie können sich nicht auf das Internet verlassen, um Dinge für Sie zu speichern. Ihr Laptop ist möglicherweise gestorben und es gibt einen kritischen Fehler in der Produktion, der behoben werden muss. Der Hauptentwickler könnte von einem Bus angefahren werden und sein Ersatz muss in Eile starten. Und ich wünschte, das letzte wäre ein theoretisches Beispiel, aber es geschah tatsächlich bei einem Startup, mit dem ich zusammen war. RUHE IN FRIEDEN.

Realistisch gesehen können Sie nicht ALLE Abhängigkeiten einchecken. Sie können kein Image des Computers einchecken, mit dem Sie Builds erstellt haben. Sie können die genaue Version des Compilers nicht einchecken. Und so weiter. Es gibt realistische Grenzen. Aber checken Sie alles ein, was Sie können - wenn Sie dies nicht tun, wird Ihr Leben nur schwieriger. Und das wollen wir nicht.

Letztes Wort: Pods sind keine Artefakte. Build-Artefakte werden aus Ihren Builds generiert. Ihr Build verwendet Pods und generiert sie nicht. Ich bin mir nicht mal sicher, warum dies diskutiert werden muss.

n13
quelle
2

Vorteile, nicht in Pods/die Versionskontrolle einzuchecken (in subjektiver Reihenfolge der Wichtigkeit):

  1. Es ist viel einfacher, Commits zusammenzuführen und Codeunterschiede zu überprüfen. Das Zusammenführen ist eine häufige Ursache für Probleme in einer Codebasis. Auf diese Weise können Sie sich nur auf relevante Dinge konzentrieren.
  2. Es ist für einen zufälligen Mitwirkenden unmöglich, die Abhängigkeiten selbst zu bearbeiten und die Änderungen zu überprüfen, was sie niemals tun sollten (und es wäre wiederum schwierig zu identifizieren, ob der Unterschied massiv ist). Das Bearbeiten von Abhängigkeiten ist eine sehr schlechte Praxis, da eine Zukunft pod installdie Änderungen verschließen könnte.
  3. Diskrepanzen zwischen dem Podfileund dem Pods/Verzeichnis werden bei Teammitgliedern schneller festgestellt. Wenn Sie einchecken Pods/und beispielsweise eine Version in der aktualisieren Podfile, aber vergessen, pod installdie Änderungen an auszuführen oder einzuchecken, Pods/fällt es Ihnen viel schwerer, die Ursache der Diskrepanz zu erkennen. Wenn Pods/nicht eingecheckt, müssen Sie pod installtrotzdem immer ausführen .
  4. Kleinere Repo-Größe. Ein kleinerer Byte-Footprint ist schön, aber das spielt im großen Schema keine große Rolle. Noch wichtiger: Wenn Sie mehr Dinge im Repo haben, erhöht sich auch Ihre kognitive Belastung. Es gibt keinen Grund, Dinge im Repo zu haben, auf die Sie nicht achten sollten. In der Dokumentation (der Abstraktion) erfahren Sie, wie etwas funktioniert, nicht im Code (der Implementierung).
  5. Es ist einfacher zu erkennen, wie viel jemand beiträgt (da die Codezeilen keine Abhängigkeiten enthalten, die er nicht geschrieben hat).
  6. JARDateien .venv/(virtuelle Umgebungen) und node_modules/werden niemals in die Versionskontrolle einbezogen. Wenn wir völlig agnostisch über die Frage waren, nicht einchecken Podswäre der Standard auf Präzedenzfall basiert.

Nachteile von nicht in der KontrollePods/

  1. Sie müssen ausgeführt werden, pod installwenn Sie Zweige wechseln oder Commits zurücksetzen.
  2. Sie können ein Projekt nicht einfach durch Klonen des Repositorys ausführen. Sie müssen das Pod-Tool installieren und dann ausführen pod install.
  3. Sie müssen über eine Internetverbindung verfügen, um ausgeführt werden zu können pod install, und die Quelle der Pods muss verfügbar sein.
  4. Wenn der Eigentümer einer Abhängigkeit sein Paket entfernt, sind Sie in Schwierigkeiten.

Zusammengefasst ohne das PodsVerzeichnis ist eine Leitplanke gegen weitere schlechte Praktiken. Das Einfügen des PodsVerzeichnisses erleichtert das Ausführen des Projekts. Ich bevorzuge das erstere gegenüber dem letzteren. Sie müssen nicht jede neue Person in einem Projekt darüber informieren, was nicht zu tun ist, wenn es überhaupt keine Möglichkeit gibt, bestimmte Fehler zu machen. Ich mag auch die Idee, eine separate Versionskontrolle für die zu haben, Podsdie die Nachteile lindert.

efthimio
quelle
1

Theoretisch sollten Sie im Pods-Verzeichnis nachsehen. In der Praxis wird es nicht immer funktionieren. Viele Pods überschreiten die Größenbeschränkung von Github-Dateien bei weitem. Wenn Sie also Github verwenden, treten Probleme beim Überprüfen des Pods-Verzeichnisses auf.

Matt
quelle
1

TL; DR: Wenn Sie den Pods/Ordner verfolgen , ist es einfacher, das Projekt abzurufen. Wenn Sie es nicht verfolgen, ist es einfacher, es zu verbessern, wenn Sie in einem Team arbeiten.

Obwohl die Cocoapods-Organisation uns ermutigt, das Pods/Verzeichnis zu verfolgen , liegt es an den Entwicklern, anhand dieser Vor- und Nachteile zu entscheiden, ob sie dies tun oder nicht:  http://guides.cocoapods.org/using/using-cocoapods.html # sollte-ich-das-Pods-Verzeichnis-in-Quellcodeverwaltung überprüfen

Persönlich verfolge ich den Pods/Ordner normalerweise nur für Projekte, an denen ich eine Weile nicht mehr arbeiten werde. Auf diese Weise kann jeder Entwickler schnell darauf zugreifen und die Arbeit mit der richtigen Version der Cocoapods fortsetzen.

Andererseits denke ich, dass der Commit-Verlauf sauberer wird und es einfacher ist, den Code zusammenzuführen und den Code einer anderen Person zu überprüfen, wenn Sie den Pods/Ordner nicht verfolgen . Normalerweise stelle ich die Version der Cocoapod-Bibliothek bei der Installation ein, um sicherzustellen, dass jeder das Projekt mit denselben Versionen wie I installieren kann.

Wenn das Pods/Verzeichnis verfolgt wird, müssen alle Entwickler dieselbe Version von Cocoapods verwenden, um zu verhindern, dass jedes Mal, wenn wir pod installeinen Pod hinzufügen / entfernen, Dutzende von Dateien geändert werden .

Fazit : Wenn Sie den Pods/Ordner verfolgen , ist es einfacher, das Projekt abzurufen. Wenn Sie es nicht verfolgen, ist es einfacher, es zu verbessern.

marcelosalloum
quelle
0

Ein guter Weg, dies zu strukturieren, wäre es, das Verzeichnis "Pods" als Git-Submodul / separates Projekt zu haben. Hier ist der Grund dafür.

  • Wenn Sie Pods in Ihrem Projekt-Repo haben, kann dies bei der Arbeit mit mehreren Entwicklern zu SEHR GROSSEN Unterschieden bei Pull-Anforderungen führen, bei denen es fast unmöglich ist, die tatsächliche Arbeit zu sehen, die von Personen geändert wurde (denken Sie an mehrere Hunderttausende von Dateien, die für Bibliotheken geändert wurden, und nur an a wenige haben sich im eigentlichen Projekt geändert).

  • Ich sehe das Problem, nichts für Git zu tun, da die Person, die die Bibliothek besitzt, sie jederzeit herunterfahren kann und Sie im Wesentlichen SOL sind. Dies löst auch das Problem.

jaredpetker
quelle
0

Ob Sie Ihren Pods-Ordner einchecken oder nicht, liegt bei Ihnen, da die Workflows von Projekt zu Projekt unterschiedlich sind. Wir empfehlen, dass Sie das Pods-Verzeichnis unter Quellcodeverwaltung halten und es nicht zu Ihrem .gitignore hinzufügen. Aber letztendlich liegt diese Entscheidung bei Ihnen:

Vorteile der Überprüfung im Pods-Verzeichnis

  1. Nach dem Klonen des Repos kann das Projekt sofort erstellt und ausgeführt werden, auch ohne dass CocoaPods auf dem Computer installiert sind. Die Pod-Installation muss nicht ausgeführt werden, und es ist keine Internetverbindung erforderlich.
  2. Die Pod-Artefakte (Code / Bibliotheken) sind immer verfügbar, auch wenn die Quelle eines Pods (z. B. GitHub) ausfällt.
  3. Die Pod-Artefakte sind nach dem Klonen des Repos garantiert identisch mit denen in der Originalinstallation.

Vorteile des Ignorierens des Pods-Verzeichnisses

  1. Das Quellcodeverwaltungs-Repo ist kleiner und nimmt weniger Platz ein. Solange die Quellen (z. B. GitHub) für alle Pods verfügbar sind, kann CocoaPods im Allgemeinen dieselbe Installation neu erstellen. (Technisch gibt es keine Garantie dafür, dass bei der Ausführung der Pod-Installation identische Artefakte abgerufen und neu erstellt werden, wenn kein Commit-SHA in der Poddatei verwendet wird Dies gilt insbesondere für die Verwendung von Zip-Dateien in der Poddatei.)
  2. Bei der Ausführung von Versionsverwaltungsvorgängen wie dem Zusammenführen von Zweigen mit verschiedenen Pod-Versionen treten keine Konflikte auf. Unabhängig davon, ob Sie im Pods-Verzeichnis einchecken oder nicht, sollten Podfile und Podfile.lock immer unter Versionskontrolle gehalten werden.
Sourabh Mahna
quelle
Sie können diesen Link für jeden Zweifel verwenden : guides.cocoapods.org/using/…
Sourabh Mahna