Domanda

Ho fatto lo sviluppo di IOS per un paio di mesi e ha appena saputo del promettente cacapods libreria per la gestione della dipendenza. L'ho provato a un progetto personale: ha aggiunto una dipendenza da kiwi al mio podfile, corse pod install CocoaPodsTest.xcodeproj e voilà , ha funzionato benissimo.

L'unica cosa che mi è stata lasciata chiedersi: cosa ho effettuato il check-in e cosa ignoro per il controllo della versione?Sembra ovvio che voglio controllare il podfile stesso, e probabilmente anche il file .xcworkspace;Ma ignoro i pod / la directory?Ci sono altri file che verranno generati lungo la strada (quando aggiungo altre dipendenze) che dovrei anche aggiungere al mio .gitignore?

È stato utile?

Soluzione

Personalmente non controllo nella directory e nei contenuti dei pods.Non posso dire che ho passato lunghi anni considerando le implicazioni, ma il mio ragionamento è qualcosa come:

Il podfile si riferisce a un tag specifico o da un tag specifico o da ciascuna dipendenza in modo che i baccelli stessi possano essere generati dal podfile, ergo sono più come un prodotto di build intermedio che una fonte e, quindi, non necessitare di un controllo della versione inil mio progetto.

Altri suggerimenti

Io commetteremo la mia directory dei pod. Non sono d'accordo sul fatto che la directory dei pod sia un artefatto di build. In effetti direi che non lo è sicuramente. Fa parte della tua fonte di applicazione: non costruirà senza di esso!

È più facile pensare ai cacapodi come strumento per sviluppatori piuttosto che uno strumento di costruzione. Non crea il tuo progetto, semplicemente cloni e installa le tue dipendenze per te. Non dovrebbe essere necessario avere i cacapodi installati per essere in grado di costruire semplicemente il tuo progetto.

Facendo cacapodds una dipendenza della tua build, ora è necessario assicurarsi che sia disponibile ovunque potresti aver bisogno di costruire il tuo progetto ... Un amministratore di squadra ne ha bisogno, il tuo server CI ne ha bisogno. Dovresti, di regola, essere sempre in grado di clonare il tuo repository di origine e costruire senza ulteriori sforzi.

Non commettere la directory PODS crea anche un massiccio mal di testa se si cambiano frequentemente i rami. Ora è necessario eseguire POD installa ogni volta che si cambiano i rami per assicurarti che le dipendenze siano corrette. Questo potrebbe essere meno problemi in quanto le tue dipendenze si stabilizzano, ma presto in un progetto questo è un enorme affondamento del tempo.

Allora, cosa ignoro? Niente. Podfile, il file di blocco e la directory dei pod vengono tutti commessi. Fidati di me, ti farà risparmiare un sacco di problemi. Quali sono i contro? Un repo leggermente più grande? Non è la fine del mondo.

Consiglio di utilizzare il Obiettivo di GitHub-C Gitignore . In dettaglio, le migliori pratiche sono:

    .
  • Il Podfile deve essere sempre sotto controllo sorgente.
  • Il Podfile.lock deve essere sempre sotto controllo sorgente.
  • Lo spazio di lavoro generato da cacapods dovrebbe essere tenuto sotto controllo sorgente.
  • Qualsiasi Pod referenziato con l'opzione :path dovrebbe essere tenuto sotto controllo sorgente.
  • La cartella ./Pods può essere mantenuta sotto controllo sorgente.

    Per ulteriori informazioni è possibile fare riferimento a Guida ufficiale .

    Fonte: Sono un membro del team Core Cocapods, come @ALOY


    .

    Sebbene la cartella PODS sia un artefatto di build ci sono motivi per cui potresti prendere in considerazione decidere se non lo mantengono sotto controllo sorgente:

      .
    • cacapods non è un gestore di pacchetti in modo che la fonte originale della biblioteca possa essere rimossa in futuro dall'autore.
    • Se la cartella PODS è inclusa nel controllo sorgente, non è necessario installare i cacapodi per eseguire il progetto mentre il checkout sarebbe sufficiente.
    • i cacapods sono ancora in corso in corso e ci sono opzioni che non sempre conducono allo stesso risultato (ad esempio il :head e le opzioni :git attualmente non utilizzano i commit memorizzati nel Podfile.lock).
    • Ci sono meno punti di errore se si potrebbe riprendere il lavoro su un progetto dopo un tempo medio / lungo di tempo.

file .gitignore

Nessuna risposta effettivamente offre un .gitignore, quindi ecco due sapori.


.

Verifica nella directory dei pod ( Vantaggi )

xcode / ios amichevole Git Ignora, saltando file di sistema Mac OS, XCode, Build, altri repository e backup.

.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/
.


.

Ignorando la directory dei pod ( Vantaggi )

.gitignore: (APPEND ALL'elenco precedente)

# Cocoapods
Pods/
.

.

Se si seleziona o meno la directory dei pod, il podfile e il podfile.lock devono sempre essere tenuti sotto controllo della versione.

Se Pods non è stato effettuato, il Podfile dovrebbe probabilmente richiedere numeri di versione esplicita per ciascun cacapod. Cacapods.org discussione qui .

Generalmente lavoro su app dei clienti.In tal caso, aggiungo anche la directory PODS al repo, per garantire che in qualsiasi momento qualsiasi periodo di sviluppo possa fare un checkout e costruire ed eseguire.

Se fosse un'app della nostra, probabilmente escluderei la directory dei pod fino a quando non ci lavorerò per un po '.

In realtà, devo concludere che potrei non essere la persona migliore per rispondere alla tua domanda, contro vista degli utenti pura :) Tweet di questa domanda da https://twitter.com/cocoapodsorg .

La risposta per questo è data direttamente in Documenti di cacapod. Puoi guardare a " http://guides.cocopods.org/using/using-cocopods.html#should-i-igore--pods-directory-in-source-control "

.

Sia che tu controlli o meno la cartella PODS dipende da te, come I flussi di lavoro variano dal progetto al progetto. Ti consigliamo di mantenere il Directory Pods sotto controllo sorgente e non aggiungerlo al tuo .gitignore. Ma in definitiva questa decisione dipende da te:

Vantaggi del controllo nella directory PODS

    .
  • Dopo aver clonata il repo, il progetto può immediatamente costruire ed eseguire, anche senza avere cacapodi installati sulla macchina. Non c'è È necessario eseguire l'installazione di POD e non è necessaria alcuna connessione Internet.
  • Gli artefatti del pod (codice / librerie) sono sempre disponibili, anche se la fonte di un POD (ad esempio GitHub) dovesse scendere.
  • Gli artefatti del Pod sono garantiti per essere identici a quelli dell'impianto originale dopo aver clonato il repo.

    Vantaggi di ignorare la directory dei pod

      .
    • Il repo del controllo sorgente sarà più piccolo e prenderà meno spazio.

    • Finché sono disponibili le fonti (ad es. GitHub) per tutti i pod sono disponibili, i cacapods è generalmente in grado di ricreare la stessa installazione. (Tecnicamente non ci sono garanzie che eseguire l'installazione di POD si recuperano e ricreare artefatti identici quando non usi un commit sha nel Podfile. Questo è particolarmente vero quando si utilizzano file zip nel podfile.)

    • Non ci saranno conflitti da affrontare quando si eseguono operazioni di controllo della sorgente, come la fusione di rami con un pod diverso Versioni.

      Sia che tu controlli o meno la directory dei pod, il podfile e Podfile.lock dovrebbe sempre essere tenuto sotto controllo della versione.

Controllo tutto.(Pods/ e Podfile.lock.)

Voglio essere in grado di clonare il repository e sapere che tutto funzionerà solo come ha fatto l'ultima volta che ho usato l'app.

Preferirei il fornitore di cose rispetto al rischio di risultati diversi che potrebbero essere causati da una versione diversa del gemma o da qualcuno che riscrivi la cronologia nel repository del Pod, ecc.

Sono nel campo degli sviluppatori che non controllano le biblioteche, supponendo che abbiamo una buona copia disponibile in un'altra posizione. Quindi, nel mio .gitignore includo le seguenti linee specifiche per i cacapodi:

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

Allora mi assicuro di avere una copia delle biblioteche in una posizione sicura. Piuttosto che (MIS-) utilizzare il repository di codice del progetto per memorizzare le dipendenze (compilato o meno) penso che il modo migliore per farlo sia per archiviare le build. Se si utilizza un server CI per le tue build (come Jenkins) è possibile archiviare in modo permanente qualsiasi build che sono importanti per te. Se fai tutte le tue bobbette di produzione nel tuo Xcode locale, prendi l'abitudine di prendere un archivio del tuo progetto per qualsiasi build che devi mantenere. Qualcosa di simile a: 1. Prodotto -> Archivio

    .
  1. Distribuisci ... Invia a IOS App Store / Salva per l'implementazione aziendale o ad-hoc / cosa hai

  2. Rivela la cartella del progetto in Finder

  3. Fare clic con il tasto destro del mouse e compressione "Qualsiasi merito di un mucchio"

    fornisce un'immagine as-costruita dell'intero progetto, inclusa le impostazioni complete del progetto e dell'area di lavoro utilizzate per costruire l'app e le distribuzioni binarie (come Sparkle, SDK proprietari come TestFlight, ecc.) Se loro o meno Utilizzare i cacapodi.

    Aggiornamento: Ho cambiato idea su questo e ora commettere il Podfile.lock to Source Control. Tuttavia, credo ancora che i pod stessi siano costruiti artefatti e dovrei essere gestito come tale al di fuori del controllo della fonte, attraverso un altro metodo come il tuo server CI o un processo di archivio come descrivo sopra.

Preferisco commettere directory Pods insieme a Podfile e Podfile.lock per assicurarti che qualcuno nel mio team possa effettuare il checkout della fonte in qualsiasi momento e non devono preoccuparsi di nulla o fare cose aggiuntive per farlo funzionare.

Questo aiuta anche in uno scenario in cui hai fissato un bug all'interno di uno dei pod o modificato un certo comportamento secondo le tue esigenze, ma queste modifiche non saranno disponibili su altre macchine se non commesse.

E per ignorare le directory non necessarie:

xcuserdata/
.

Devo dire, sono un fan di commettere baccelli al repository. Seguendo un link già detto ti darà un buon file .gitignore per alzarti i tuoi progetti Xcode per iOS per consentire i baccelli ma anche per te per escludere facilmente se lo desideri: https://github.com/github/gitignore/blob/master/obiettivo-c.gitignore

Il mio ragionamento per essere un fan dell'aggiunta di baccelli al repository è per una ragione fondamentale che nessuno sembra riprendere, cosa succede se una biblioteca che il nostro progetto è così dipendente dall'improvviso è improvvisamente rimosso dal web?

    .
  • Forse l'host decide che non vogliono più mantenere il loro github Account Apri cosa succede se la biblioteca è dire diversi anni (ad esempio come anziani di 5 anni) c'è un alto rischio il Il progetto potrebbe non essere più disponibile alla fonte
  • anche un altro punto, cosa succede se l'URL al repository i cambiamenti? Diciamo la persona che serve il pod dal loro GitHub conto, decide di rappresentarsi sotto una maniglia diversa - Gli URL dei tuoi Pods si rompono.
  • Finalmente un altro punto. Dì se sei uno sviluppatore come me che fa molto di codifica quando su un volo tra i paesi. Faccio un rapido tiro Il ramo 'Master', fai un baccello si installa su quel ramo, mentre è seduto Nell'aeroporto e mi sono messo tutto per la prossima 8 ora volo. Ottengo 3 ore nel mio volo, e rendi conto di dover passare Un altro ramo .... 'DOH' - Scanning Pod Information che è disponibile solo sul ramo "Master".

    NB ... Nota il branch 'Master' per lo sviluppo è solo per gli esempi, ovviamente le filiali "master" nei sistemi di controllo della versione, devono essere mantenute pulite e dispiegabili / costruibili in qualsiasi momento

    Penso che da questi, istantanee nei tuoi repository del tuo codice siano certamente migliori di essere severi in materia di dimensioni del repository. E come già menzionato, il file Podfile.lock - mentre la versione controllata ti darà una buona storia delle tue versioni POD.

    Alla fine della giornata, se si dispone di una scadenza pressata, un budget limitato, il tempo è essenziale - dobbiamo essere il più possibile possibile e non perdere tempo su icoseologie rigorose, e invece sfruttare un set di strumenti lavorare insieme - per rendere più facile le nostre vite più efficienti.

Alla fine dipende da te l'approccio che prendi.

Questo è ciò che la squadra di cacapods ci pensa:

.

Sia che tu controlli o meno la cartella PODS dipende da te, come I flussi di lavoro variano dal progetto al progetto. Ti consigliamo di mantenere il Directory Pods sotto controllo sorgente e non aggiungerlo al tuo .gitignore. Ma in definitiva questa decisione dipende da te.

Personalmente vorrei conservare pods out, come node_modules se stavamo usando nodo o bower_components Se stavo usando BOWER . Questo richiede quasi qualsiasi manager di dipendenza là fuori ed è la filosofia alle spalle i sottomoduli Git Aswell.

Comunque ci sono talvolta che potresti voler essere veramente sicuro di stato-of-art di una certa dipendenza, in questo modo in cui stai trasportando la dipendenza nel tuo progetto. Naturalmente ci sono diversi inconvenienti che si applicano se lo fai, ma le preoccupazioni non si applicano solo ai cacapodi, quelli si applicano a qualsiasi manager di dipendenza là fuori.

Sotto c'è un buon elenco pro / contro fatto da team di cacapods e il testo completo della citazione menzionata in precedenza.

Team di cacapods: dovrei controllare la directory dei pod nel controllo sorgente?

Dipende, personalmente:

Perché i pod dovrebbero essere parte del repo (sotto controllo sorgente) e non dovrebbero essere ignorati
    .
  • La fonte è identica
  • Puoi costruirlo subito come (anche senza i cacapodi)
  • Anche se un pod viene cancellato, abbiamo ancora la sua copia (sì, questo può accadere e lo ha fatto. In un vecchio progetto dove vuoi solo un piccolo cambiamento che avresti bisogno di implementare una nuova biblioteca per essere in grado di implementare una nuova biblioteca per costruire anche).
  • Le impostazioni pods.xcodeproj fanno parte del controllo sorgente. Questo significa ad es. Se si dispone del progetto in swift 4, ma alcuni baccelli devono essere in swift 3.2 perché non vengono ancora aggiornati, queste impostazioni verranno salvate. Altrimenti quello che clonato il repo si sarebbe concluso con errori.
  • È sempre possibile eliminare i pod dal progetto ed eseguire pod install, il contrario non può essere fatto.
  • Anche gli autori dei cacapodi lo consigliano.

    Alcuni contro: repository più ampio, diffond di confusione (principalmente per i membri del team), potenzialmente più conflitti.

Per me, la più grande preoccupazione è la prova futura della tua fonte.Se hai intenzione di avere il tuo progetto durare per un po 'e i cacapodi vanno via o la fonte di uno dei baccelli scende, sei completamente fuori fortuna se cerca di costruire fresco da un archivio.

Questo potrebbe essere mitigato con periodici archivi di fonti completi.

Controllare i pod.

Penso che questo dovrebbe essere un TINET di Sviluppo software

    .
  • Tutte le build devono essere riproducibili
  • L'unico modo per garantire che le build siano riproducibile è il controllo di tutte le dipendenze; Controllo in tutti Le dipendenze sono quindi un must.
  • Un nuovo sviluppatore a partire da zero è in grado di controllare il tuo progetto e iniziare a lavorare.

    Perché?

    I cacapods o qualsiasi altra biblioteca esterna potrebbero cambiare quale potrebbe spezzare le cose. Oppure potrebbero muoversi o essere rinominati o rimossi del tutto. Non puoi fare affidamento su internet per archiviare cose per te. Il tuo laptop potrebbe essere morto e c'è un bug critico nella produzione che deve essere risolto. Lo sviluppatore principale potrebbe essere colpito da un autobus e il suo sostituto deve iniziare da fretta. E vorrei che l'ultimo sia stato un esempio teorico, ma è effettivamente accaduto in un'avvio con cui ero. RIP.

    Ora, realisticamente, non puoi davvero controllare tutte le dipendenze. Non è possibile controllare un'immagine della macchina che hai usato per creare build; Non è possibile controllare la versione esatta del compilatore. E così via. Ci sono limiti realistici. Ma controlla tutto ciò che puoi - non fare così rende la tua vita più dura. E non lo vogliamo.

    Parola finale: i pod non sono costruiti artefatti. Costruisci artefatti sono ciò che viene generato dalle tue build. La tua build usa i baccelli, non generali. Non sono nemmeno sicuro del perché questo deve essere discusso.

In teoria, è necessario verificare la directory PODS.In pratica, non funzionerà sempre.Molti baccelli superano bene il limite di dimensioni dei file GitHub, quindi se si utilizza GitHub, avrai problemi a controllare nella directory PODS.

Pro di non check-in Pods/ to Version Control (in ordine soggettivo di importanza):

    .
  1. molto più facile da unire commesso e revisione del codice diffs. La fusione è una fonte comune di problemi in una base di codice, e questo consente di concentrarti solo su cose che sono pertinenti.
  2. È impossibile per alcuni contributori casuali per modificare le dipendenze stesse e controllare i cambiamenti in, che non dovrebbero mai fare (e di nuovo sarebbero difficili da identificare se il diff è massiccio). Le dipendenze di modifica sono pessime pratiche perché un futuro pod install potrebbe occludere le modifiche.
  3. Le discrepanze tra il Podfile e la directory Pods/ sono trovate più rapidamente tra i compagni di squadra. Se si seleziona Pods/ e, ad esempio, aggiorna una versione nel Podfile, ma dimentica di eseguire pod install o controllare le modifiche a Pods/, avrai un tempo molto più difficile che nota la fonte della discrepanza. Se Pods/ non è stato effettuato, è sempre necessario eseguire pod install comunque.
  4. Dimensione del repo più piccola. Avere un minore impronta di byte è bello, ma non importa molto nel grande schema. Ancora più importante: avere più cose nel repo aumenta anche il tuo carico cognitivo. Non c'è motivo per avere cose nel repo che non dovresti guardare. Fare riferimento alla documentazione (l'astrazione) per sapere come funziona qualcosa, non al codice (l'implementazione).
  5. più facile da discernere quanto qualcuno contribuisca (poiché le loro linee di codice hanno contribuito non includono dipendenze che non hanno scritto)
  6. JAR Files, .venv/ (ambienti virtuali) e node_modules/ non sono mai incluse nel controllo della versione. Se fossimo completamente agnostici sulla domanda, non check-in Pods sarebbe il valore predefinito basato su precedenti.

    Contro di non check-in the Pods/

      .
    1. È necessario eseguire pod install durante la commutazione di rami o ritornando i commit.
    2. Non è possibile eseguire un progetto semplicemente clonando il repository. È necessario installare lo strumento POD, quindi eseguire pod install.
    3. È necessario disporre di una connessione Internet per eseguire pod install e la fonte dei POD deve essere disponibile.
    4. Se il proprietario di una dipendenza rimuove il loro pacco, sei nei guai.

      In sintesi, non includendo la directory Pods è un guardrail contro più brutte pratiche. incluso La directory Pods semplifica il funzionamento del progetto. Preferisco il primo di quest'ultimo. Non avrai bisogno di debrire ogni nuova persona su un progetto su "Cosa non per fare" se non c'è la possibilità di fare determinati errori in primo luogo. Mi piace anche l'idea di avere un controllo di versione separato per il Pods che allevia il Contro.

Sembra che un buon modo per strutturare questo sarebbe davvero quello di avere la directory "PODS" come sottomodulo GIT / progetto separato, ecco perché.

    .
  • Avere Pods nel tuo progetto Repo, quando si lavora con diversi sviluppatori, può causare differ molto grandi nelle richieste di tiro in cui è quasi impossibile vedere il lavoro effettivo che è stato cambiato da persone (pensa a centinaia di migliaia di file modificatiPer le biblioteche, e solo pochi modificati nel progetto attuale).

  • Vedo il problema di non commettere nulla da gitare, poiché la persona che possede la biblioteca potrebbe tenerlo giù in qualsiasi momento e sei essenzialmente sol, questo risolve anche quello.

Se il check nella cartella PODS dipende da te, poiché i flussi di lavoro variano dal progetto al progetto. Si consiglia di conservare la directory dei pod sotto controllo sorgente e non aggiungerlo al tuo .gitignore. Ma in definitiva questa decisione dipende da te:

Vantaggi del controllo nella directory PODS

    .
  1. Dopo aver clonata il repo, il progetto può immediatamente costruire ed eseguire, anche senza avere cacapodi installati sulla macchina. Non è necessario eseguire l'installazione di POD e non è necessaria alcuna connessione Internet.
  2. Gli artefatti del pod (codice / librerie) sono sempre disponibili, anche se la fonte di un POD (ad esempio GitHub) dovesse scendere.
  3. Gli artefatti del Pod sono garantiti per essere identici a quelli dell'impianto originale dopo aver clonato il repo.

    Benefici di ignorare la directory dei pod

      .
    1. Il repo del controllo della fonte sarà più piccolo e riprenderà meno spazio. Finché sono disponibili le fonti (ad es. GitHub) per tutti i baccelli, i cacapods è generalmente in grado di ricreare la stessa installazione. (Tecnicamente non vi è alcuna garanzia che esegue l'installazione di POD recupera e ricree i manufatti identici quando non si utilizza un commit SHA nel podfile . Questo è particolarmente vero quando si utilizzano i file zip nel podfile.)
    2. Non ci saranno conflitti da affrontare quando si eseguono operazioni di controllo della sorgente, come la fusione di rami con diverse versioni del POD. Indipendentemente dal fatto che tu controlli o meno la directory PODS, il podfile e il podfile.lock devono sempre essere tenuti sotto controllo della versione.
.

TL; DR: quando si traccia la cartella Pods/, il progetto è più facile riprendere da. Quando non la monitora, è più facile migliorare quando Lavori in una squadra.

Sebbene l'organizzazione dei cacapods ci incoraggiasse a tenere traccia della directory Pods/, dicono che dipende dal Devs decidere se o meno basati su questi pro e contro: http://guides.cocoapods.org/using/iding.cocoApods .html # dovrebbe-i-check-the-pods-directory-in-source-controllo

Personalmente, di solito monitoro la cartella Pods/ solo per i progetti che non lavorerò più per un po '. In questo modo qualsiasi sviluppatore può riprenderlo rapidamente e continuare il lavoro utilizzando la versione corretta dei cacapodi.

D'altra parte, penso che la cronologia dei commit diventa più pulita e è più facile unire il codice e rivedere il codice di un'altra persona quando non stai monitorando la cartella Pods/. Di solito imposta la versione della biblioteca del cacapod quando lo installo per assicurarmi che chiunque possa installare il progetto utilizzando le stesse versioni come i.

Inoltre, quando la directory Pods/ viene tracciata, tutti i dispositivi devono utilizzare la stessa versione dei cacapodi per evitare che cambiano dozzine di file ogni volta che eseguiamo pod install per aggiungere / rimuovere un pod.

linea di fondo : quando si traccia la cartella Pods/, dal progetto è più facile da raccogliere. Quando non la monitora, è più facile migliorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top