Ce qui se passe dans votre .gitignore si vous utilisez CocoaPods?
J'ai fait la de développement iOS pour un couple de mois maintenant et tout juste d'apprendre le prometteur CocoaPods bibliothèque pour la gestion de la dépendance.
Je l'ai essayé sur un projet personnel: ajout d'une dépendance à Kiwi à mon Podfile, couru pod install CocoaPodsTest.xcodeproj
, et voila, il a travaillé beaucoup.
La seule chose que je me pose, c'est: que dois-je vérifier, et que dois-je ignorer pour le contrôle de version? Il semble évident que je veux vérifier dans le Podfile lui-même, et probablement la .xcworkspace fichier ainsi; mais puis-je ignorer les Gousses/répertoire? Existe-il d'autres fichiers qui seront générés en bas de la route (quand j'en ajouter d'autres dépendances) que je devrais aussi ajouter à mes .gitignore?
Vous devez vous connecter pour publier un commentaire.
Personnellement je n'ai pas de vérifier dans les Gousses annuaire & contenu. Je ne peux pas dire que j'ai passé de longs siècles de considérer les implications, mais mon raisonnement est quelque chose comme:
La Podfile se réfère à une balise spécifique ou de ou de validation de chaque dépendance si les Gousses eux-mêmes peuvent être générés à partir de la podfile, ergo, ils sont plus comme un intermédiaire, construire produit qu'une source et, par conséquent, n'a pas besoin de contrôle de version dans mon projet.
Podfile
(où nous utilisonsgit add -a
) que nous devrionsgitignore
Podfile.lock & répertoire module ?pod list outdated
(comme vous le feriez dans MacPorts), pour voir qui de mon pod versions n'est pas la version actuellement disponible, mais cette fonctionnalité fonctionne différemment. Je pense que je m'attendais à un python pip style de l'installation, où il est l'une des exigences de fichier que l'outil de mises à jour pour vous sur demande, ce qui semble plus élégant que deux fichiers avec une syntaxe différente. Donc, avec Cocoapods, lorsque vous avez besoin de savoir exactement ce code est allé dans une de construire, valider les Podfile.verrouillage.proj.xcworkspace
fichier qui a été généré parpod install
? Devrait-il être dans.gitignore
trop?Podfile.lock
: il est appelé par Cocoapods comme recommandé d'être sous contrôle de version.Je remets mon Gousses d'annuaire. Je ne suis pas d'accord que les Gousses d'annuaire, un artefact. En fait, je dirais le plus n'est certainement pas. C'est une partie de la source de votre application: il ne sera pas construire sans elle!
Il est plus facile de penser à CocoaPods comme un outil de développement plutôt qu'un outil de construction. Il n'a pas à construire votre projet, il suffit simplement de clones et installe vos dépendances pour vous. Il ne devrait pas être nécessaire d'avoir CocoaPods installé pour être en mesure de simplement construire votre projet.
En faisant CocoaPods une dépendance de votre build, vous devez maintenant vous assurer qu'il est disponible partout où vous pourriez avoir besoin pour construire votre projet...une équipe d'admin besoins, votre serveur CI en a besoin. Vous pouvez, en règle générale, toujours être en mesure de cloner votre dépôt et de construire sans effort supplémentaire.
Pas commettre votre Gousses directory crée également un gros mal de tête si vous basculez souvent branches. Maintenant, vous devez exécuter la gousse d'installer chaque fois que vous changez branches assurez-vous que vos dépendances sont corrects. Cela peut être moins de tracas que vos dépendances stabiliser, mais au début d'un projet c'est un énorme puits de temps.
Alors, que dois-je l'ignorer? Rien. Podfile, le fichier de verrouillage et les Gousses répertoire de tous les obtenir commis. Croyez-moi, il va vous faire économiser beaucoup de tracas. Quels sont les inconvénients? Un légèrement plus grand repo? Pas la fin du monde.
Pods
répertoire va vous causer de la douleur, lors de la vérification il en est également livré avec son propre ensemble de problèmes. par exemple, un développeur bosses une version d'une dépendance dans unPodfile
sans se rappeler de vérifier dans la mise à jour des sources dans les Gousses. La loi de Murphy.pod install
chaque fois que vous changez de branche coûts de précieux ... des DIZAINES de secondes, mais il élimine cette classe de problèmes tout à fait.pod install
de toute façon lors de la commutation de branches, de sorte qu'il semble inutile d'ajouter un tas de fichiers, vous devez recréer.It won't build without it!
Vous pourriez aussi bien s'engager XCode tropJe recommande d'utiliser le GitHub de l'Objective-C gitignore.
Dans le détail, les meilleures pratiques sont les suivantes:
Podfile
doit toujours être sous contrôle de code source.Podfile.lock
doit toujours être sous contrôle de code source.:path
option devrait être gardé sous contrôle de code source../Pods
dossier peut être gardé sous contrôle de code source.Pour plus d'informations vous pouvez vous référer à la guide officiel.
source: je suis un membre de la CocoaPods équipe de base, comme @alliage
Bien que les Gousses dossier, un artefact, il ya des raisons que vous pourriez envisager de décider si pour le garder sous contrôle de code source:
:head
et la:git
options ne sont pas actuellement à l'aide de la commet stockées dans lePodfile.lock
)..gitignore fichier
Pas de réponse fait offre un
.gitignore
, donc, ici, sont deux saveurs.Vérification dans les Gousses répertoire (Avantages)
Xcode/iOS friendly git d'ignorer, ignorer Mac fichiers du système d'exploitation, Xcode, construit, d'autres référentiels et des sauvegardes.
.gitignore:
En ignorant les Gousses répertoire (Avantages)
.gitignore: (ajouter à la liste précédente)
Si
Pods
ne sont pas enregistrés, votrePodfile
devrait probablement demande explicite des numéros de version pour chaque Cocoapod. Cocoapods.org discussion ici.Je travaille en général sur l'application de clients. Dans ce cas, j'ai ajouter les Gousses d'annuaire pour les pensions ainsi, pour s'assurer qu'à tout moment, n'importe quel développeur peut faire une extraction et de créer et d'exécuter des.
Si c'était une application de la nôtre, je serais probablement exclure les Gousses répertoire jusqu'à ce que je ne travaillez pas sur elle pendant un certain temps.
En fait, je dois conclure, je ne pourrais pas être la meilleure personne pour répondre à votre question, par rapport à des vues de pure utilisateurs 🙂 je vais tweet à propos de cette question de https://twitter.com/CocoaPodsOrg.
La réponse à cette question est donnée directement dans Cocoapod docs. Vous pouvez regarder les "http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control"
Je vérifie tout. (
Pods/
etPodfile.lock
.)Je veux être en mesure de cloner le dépôt et de savoir que tout va juste travailler comme il l'a fait la dernière fois j'ai utilisé l'application.
Je préfère fournisseur de choses que le risque d'avoir des résultats différents qui pourraient être causés par une version différente de la gemme, ou quelqu'un de réécriture de l'histoire dans le module référentiel, etc.
Je suis dans le camp des développeurs qui ne vérifient pas dans les bibliothèques, en supposant que nous avons une bonne copie dans un autre emplacement. Donc, dans mon .gitignore-je inclure les lignes suivantes spécifiques à CocoaPods:
Puis-je m'assurer que nous avons une copie de l'bibliothèques dans un endroit sûr. Plutôt que de (mal)utiliser un code du projet de référentiel pour stocker les dépendances (compilé ou non) je pense que la meilleure façon de le faire est d'archives des builds. Si vous utilisez un serveur CI pour vos constructions (tels que Jenkins), vous pouvez en permanence archiver toutes les versions qui sont importantes pour vous. Si vous faites tout votre production s'appuie dans vos locaux Xcode, prenez l'habitude de prendre une archive de votre projet pour la builds que vous devez garder. Quelque chose comme:
1. Produit --> Archive
Distribuer... Soumettre à l'App Store d'iOS /Enregistrer pour l'Entreprise ou au Déploiement Ad-hoc /qu'avez-vous
Révéler votre dossier de projet dans le Finder
Clic droit et Compresser "WhateverProject"
Cela fournit une mesure de l'image de l'ensemble du projet, y compris l'ensemble du projet et de l'espace de travail les paramètres utilisés pour construire l'application aussi bien que les distributions binaires (comme Éclat, propriétaire des Kits de développement logiciel comme TestFlight, etc.) qu'ils utilisent ou non CocoaPods.
Mise à jour: j'ai changé d'avis sur cela et maintenant commettre le
Podfile.lock
à la source de contrôle. Cependant, je persiste à croire que les gousses sont eux-mêmes de construire des artefacts et devraient être gérés comme tels en dehors du contrôle de code source, par une autre méthode telle que votre serveur CI ou d'un processus d'archivage comme je l'ai décrit ci-dessus.Podfile.lock
: docs.cocoapods.org/guides/working_with_teams.htmlPodfile.lock
cuit dans les chemins d'accès aux locaux des gousses, je n'avais pas envisagé d'ajouter à la version de contrôle. Cependant, maintenant que j'y pense, ce n'est pas différente de la locale les modifications que je fais dansPodfile
mais ne jamais s'engager. Merci de souligner ce point.Podfile.lock
fichier.Podfile
/Podfile.lock
/Pods
) dans le contrôle de version, ce qui a le bel effet de permettre à moi de passer en revue les modifications apportées parpod update
avant de l'intégrer au projet, mais aussi des moyens de mon projet toujours compile (même sans CocoaPods).pod
de commande ne fonctionne pas parce que certains commande git est long et n'est pas terminer à temps. Pour tout ce temps quepod
ne fonctionne pas, je suis coincé et ne peut même pas construire le projet. En commettant toutes les sources est une bonne idée car il n'a vraiment accélérer la commutation entre les branches.Je préfère commettre
Pods
répertoire avecPodfile
etPodfile.lock
à assurez-vous que quelqu'un dans mon équipe peut l'extraction de la source à tout moment et ils n'ont pas à vous soucier de quoi que ce soit ou faire d'autres choses pour le faire fonctionner.Cela aide aussi dans un scénario où vous avez correction d'un bug à l'intérieur des gousses ou modifié certains comportements en fonction de vos besoins, mais ces changements ne seront pas disponibles sur d'autres machines si pas commis.
Et à ignorer les répertoires inutiles:
Je dois dire que je suis un fan de commettre des Gousses dans le référentiel. À la suite d'un lien déjà mentionné, vous aurez un bon .gitignore fichier pour récupérer vos projets Xcode pour iOS pour permettre Gousses, mais aussi pour que vous puissiez exclure, si vous le souhaitez: https://github.com/github/gitignore/blob/master/Objective-C.gitignore
Mon raisonnement pour être un fan d'ajouter les Gousses dans le référentiel est pour une raison fondamentale qui personne ne semble se ramasser sur ce qui se passe si une bibliothèque de notre projet est donc dépendant de est soudainement retiré du web?
compte ouvert Ce qui se passe si la bibliothèque est à dire vieux de plusieurs années
(comme plus de 5 ans par exemple) il y a un fort risque que les
projet peuvent ne plus être disponibles à la source
les changements? Permet de dire que la personne effectuant la Gousse de leur GitHub
compte, décide de se représenter eux-mêmes sous un autre poignée
votre Gousses Url allons briser.
de codage lors d'un vol entre les pays. Je fais un rapide tirez sur
la branche "maître", faire une gousse d'installer sur cette branche, tout en restant assis
dans l'aéroport, et moi-même tous ensemble pour les prochaines 8 heures
vol. Je reçois 3 heures dans mon vol, et de réaliser j'ai besoin de passer à la
une autre branche.... 'DO' - manque Gousse d'information qui est disponible uniquement sur la branche "maître".
NB... s'il vous plaît noter la branche "maître" pour le développement est juste pour des exemples, évidemment "maître" des branches dans les systèmes de contrôle de version, doit être gardé propre et déployable/constructible à tout moment
Je pense que à partir de ces clichés dans vos dépôts de code sont certainement mieux que d'être strict sur le référentiel de la taille. Et comme déjà mentionné, la podfile.verrouillage de fichier - alors que la version contrôlée vous donnera une bonne histoire de votre Pod versions.
À la fin de la journée, si vous avez une date limite appuyant sur un budget serré, le temps est de l'essence -, nous devons être aussi habile que possible et ne pas perdre de temps sur le strict idéologies, et, au lieu de tirer parti d'un ensemble d'outils pour travailler ensemble à rendre notre vie plus facile, plus efficace.
À la fin, c'est à vous de l'approche que vous prenez.
C'est ce que Cocoapods équipe pense à ce sujet:
Personnellement j'aimerais garder Gousses, comme node_modules si je l'utiliser Nœud ou bower_components si je l'utiliser Bower. Cela s'applique pour presque n'importe quelle Dépendance Gestionnaire de là-bas, et c'est la philosophie derrière submodules aswell.
Cependant il y a parfois de ce que vous pourriez voulez être vraiment sûr de la l'état de l'art d'une certaine dépendance, de cette façon vous est propre la dépendance au sein de votre projet. Bien-sûr il y a plusieurs inconvénients qui s'appliquent si vous le faites, mais les préoccupations ne sont pas les seuls à Cocoapods, celles qui s'applique à toute Dépendance Gestionnaire de là-bas.
Ci-dessous il y a une bonne avantages/inconvénients liste faite par Cocoapods de l'équipe, et le texte intégral de la citation mentionnée précédemment.
Cocoapods équipe: dois-je vérifier les Gousses d'annuaire dans le contrôle de code source?
Il dépend, personnellement:
Pourquoi les gousses doivent faire partie de l'opération (sous contrôle de code source) et ne doit pas être ignoré
pods.xcodeproj
paramètres font partie de la source de contrôle. Cela signifie par exemple que si vous avez le projetswift 4
, mais quelques gousses doivent être enswift 3.2
parce qu'ils ne sont pas mis à jour encore, ces paramètres seront enregistrés. Sinon celui qui cloné le repo allait se retrouver avec des erreurs.pod install
, le contraire ne peut pas être fait.Certains inconvénients: les plus gros dépôt, confusion des diffs (principalement pour les membres de l'équipe), potentiellement plus de conflits.
Pour moi, la plus grande préoccupation est l'avenir de vérification linguistique de votre source. Si vous prévoyez d'avoir votre dernier projet pendant un certain temps et CocoaPods ne va jamais à l'écart ou de la source de l'un des gousses va vers le bas, vous êtes complètement hors de la chance si vous essayez de construire frais à partir d'une archive.
Cela pourrait être atténué avec l'périodique source complet archivals.
Vérifier dans les Gousses.
Je pense que cela devrait être un principe de développement de logiciels
reproductible est d'être en contrôle de toutes les dépendances; la vérification dans tous les
dépendances est donc un must.
Pourquoi?
CocoaPods ou toutes les autres bibliothèques externes peut changer, ce qui pourrait casser des choses. Ou ils pourraient se déplacer ou être renommé, ou être complètement éliminés. Vous ne pouvez pas compter sur internet pour stocker des choses pour vous. Votre ordinateur portable peut-être décédé et il y a un bug critique dans la production qui doit être corrigé. Le développeur principal pourrait se faire frapper par un autobus et son remplacement doit commencer à la hâte. Et je souhaite que ce dernier était un exemple théorique, mais il s'est réellement passé lors d'un démarrage, j'ai été avec. RIP.
Maintenant, de façon réaliste, vous ne pouvez pas vraiment vérifier dans TOUTES les dépendances. Vous ne pouvez pas vérifier dans une image de la machine que vous avez utilisé pour créer des versions, vous ne pouvez pas vérifier dans la version exacte du compilateur. Et ainsi de suite. Il y a des limites réalistes. Mais vérifiez tout ce que vous pouvez - pas tout à fait de votre vie plus difficile. Et nous ne voulons pas que.
Mot de la fin: les Gousses sont pas de construire des artefacts. Construire des artéfacts de ce qui est généré à partir de vos constructions. Votre build utilise des Gousses, pas les générer. Je ne suis même pas sûr de savoir pourquoi cela doit être débattu.
En théorie, vous devez vérifier dans les Gousses de répertoire. Dans la pratique, il n'est pas toujours d'aller travailler. De nombreuses gousses bien dépasser la limite de taille de github fichiers donc, si vous utilisez github vous allez avoir des problèmes de contrôle dans les Gousses de répertoire.
Pros de pas signant
Pods/
de contrôle de version (en subjective ordre d'importance):pod install
pourrait obstruer les modifications.Podfile
et laPods/
répertoire sont trouvés plus rapidement entre les coéquipiers. Si vous signezPods/
et, par exemple, de mettre à jour une version dans laPodfile
, mais oublier d'exécuterpod install
, ou par chèque dans les changements dePods/
, vous aurez un temps beaucoup plus difficile de remarquer la source de l'écart. SiPods/
n'est pas enregistré, vous devez toujours exécuterpod install
de toute façon.JAR
fichiers,.venv/
(environnements virtuels), etnode_modules/
ne sont jamais inclus dans le contrôle de version. Si nous avons été complètement agnostique sur la question, pas signantPods
par défaut basé sur le précédent.Les inconvénients de pas vérifier dans le
Pods/
pod install
lors de la commutation de branches, ou le retour s'engage.pod install
.pod install
, et la source de gousses doivent être disponibles.En résumé, pas compris la
Pods
répertoire est un garde-fou contre les mauvaises pratiques. Y compris laPods
répertoire qui fait courir le projet plus facile. Je préfère l'ancien sur le second. Vous n'aurez pas besoin de débriefing à chaque nouvelle personne sur un projet de "ce qui pas à faire" si il n'y a pas une possibilité de faire certaines erreurs dans la première place. J'aime aussi l'idée d'avoir une version séparée pour le contrôle de l'Pods
qui atténue les Inconvénients.Semble être une bonne manière de structurer ce serait vraiment d'avoir les "Gousses" directory en tant que git sous-module /projet distinct, voici pourquoi.
Avoir les gousses dans votre projet de pensions de titres, lorsque l'on travaille avec plusieurs développeurs, peut provoquer de TRÈS GRANDES différences dans le pull demandes où il est presque impossible de voir le travail qui a été changé par des personnes (penser à plusieurs centaines de milliers de fichiers qui ont été modifiés pour les bibliothèques, et à seulement quelques changé dans le projet).
Je vois le problème de ne pas s'engager tout de git, comme la personne qui est propriétaire de la bibliothèque pourrait le prendre à tout moment et vous êtes essentiellement de SOL, cela résout aussi que.
Si oui ou non vous vérifiez dans votre Gousses dossier est à vous, que les flux de travail varie en fonction du projet. Nous vous recommandons de conserver les Gousses d'annuaire sous contrôle de code source, et de ne pas l'ajouter à votre .gitignore. Mais, en définitive, cette décision est à vous:
Avantages de la vérification dans les Gousses répertoire
Avantages d'ignorer les Gousses répertoire
Aussi longtemps que les sources (par exemple, GitHub) pour toutes les Gousses sont disponibles, CocoaPods est généralement en mesure de recréer la même installation.(Techniquement, il n'y a aucune garantie que la course de pod installation d'extraction et de le recréer à l'identique les artefacts lorsque vous n'utilisez pas un commit SHA dans la Podfile. Cela est particulièrement vrai lors de l'utilisation de fichiers zip dans le Podfile.)
Si vous vérifiez dans les Gousses de répertoire, le Podfile et Podfile.verrouillage doit toujours être gardé sous contrôle de version.
Bien que le Cocoapods organisation nous encourager à suivre le
Pods/
répertoire, ils disent que c'est aux devs pour décider si ou de ne pas le faire sur la base de ces avantages et des inconvénients: http://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-controlPersonnellement, j'ai l'habitude de suivre les
Pods/
dossier juste pour des projets que je ne peux pas travailler plus pendant un certain temps. De cette façon, n'importe quel développeur peut rapidement revenir et continuer le travail en utilisant la version correcte de la cocoapods.D'autre part, je pense que la validation de l'histoire devient plus propre et plus facile de fusionner le code et l'examen d'une autre personne code lorsque vous n'êtes pas suivi le
Pods/
dossier. J'ai l'habitude de définir la cocoapod de la bibliothèque de version quand j'ai installer pour s'assurer que n'importe qui peut installer le projet en utilisant les mêmes versions que I.Aussi, lorsque le
Pods/
répertoire est en cours de suivi de toutes les développeurs doivent utiliser la même version de Cocoapods pour l'empêcher de changer des dizaines de fichiers chaque fois que nous couronspod install
pour ajouter/supprimer un pod.Ligne de fond: lorsque vous suivez le
Pods/
dossier, le projet est plus facile à ramasser de. Lorsque vous n'avez pas suivi, c'est plus facile à améliorer.