Co trafia do Twojego .gitignore, jeśli używasz CocoaPods?

388

Zajmuję się tworzeniem iOS od kilku miesięcy i właśnie poznałem obiecującą bibliotekę CocoaPods do zarządzania zależnościami.

Wypróbowałem to na osobistym projekcie: dodałem zależność od Kiwi do mojego Podfile, uruchomiłem pod install CocoaPodsTest.xcodeproji voila , działało świetnie.

Zastanawiam się tylko: co mam zameldować i co zignorować w przypadku kontroli wersji? Wydaje się oczywiste, że chcę sprawdzić sam plik Podfile i prawdopodobnie także plik .xcworkspace; ale czy mogę zignorować katalog Pods /? Czy są inne pliki, które zostaną wygenerowane w późniejszym czasie (kiedy dodam inne zależności), które powinienem również dodać do mojego .gitignore?

Dan Tao
źródło

Odpowiedzi:

261

Osobiście nie sprawdzam w katalogu i zawartości Pods. Nie mogę powiedzieć, że spędziłem długie lata rozważając implikacje, ale moje rozumowanie jest takie:

Podfile odnosi się do określonego znacznika lub zatwierdzenia każdej zależności, więc same Pods mogą być generowane z pliku podfile, ergo są one bardziej jak produkt kompilacji pośredniej niż źródło, a zatem nie wymagają kontroli wersji w moim projekcie.

Matt Mower
źródło
70
Warto wspomnieć, że projekt CocoaPods ignoruje katalog Pods w przykładzie .
joshhepworth
34
Zastanowiłbym się nad dodaniem pliku Podfile.lock, ponieważ wtedy zapisujesz dokładnie, jakich wersji bibliotek użyłeś dla konkretnej kompilacji i możesz odtworzyć go dokładnie dla innych członków zespołu. Pytanie „jakiej wersji X używasz” może być bardzo denerwujące. Oto dobra dyskusja na temat rubinowego odpowiednika Gemfile
Matt Connolly
12
Nie rozumiem, dlaczego miałbyś popełnić Podfile.lock, czy nie powinieneś być bardziej szczegółowy w swoim Podfile na temat dokładnie tych wersji, na których polegasz? Czego nie rozumiem?
Michael Baltaks,
9
Oto, jak to widzę: Jeśli Twój plik Podfile określa dokładne wersje każdego zasobnika, jedynym sposobem na uzyskanie aktualizacji jest sprawdzenie, czy aktualizacje istnieją i ręczne ich określenie. Może to być preferowane w przypadku popularnej lub krytycznej aplikacji. W przypadku wcześniejszego rozwoju ważne aktualizacje są znacznie łatwiejsze, jeśli po prostu zaktualizujesz plik Podfile.lock, gdy zostanie on zaktualizowany, a następnie zdecydujesz, czy chcesz aktualizacji, co prawdopodobnie robisz przez większość czasu.
davidkovsky
43
Należy wspomnieć Podfile.lock: Cocoapods przywołał go jako zalecany pod kontrolą wersji.
cbowns 11.10.2013
383

Zatwierdzam mój katalog Pods. Nie zgadzam się, że katalog Pods jest artefaktem kompilacji. W rzeczywistości powiedziałbym, że zdecydowanie nie jest. Jest to część twojego źródła aplikacji: bez niego nie da się zbudować!

Łatwiej jest myśleć o CocoaPods raczej jako narzędziu dla programistów niż narzędziu do budowania. Nie buduje twojego projektu, po prostu klonuje i instaluje dla ciebie twoje zależności. Zainstalowanie CocoaPods nie powinno być konieczne, aby móc po prostu zbudować projekt.

Uczyniając CocoaPods zależnością twojej kompilacji, musisz teraz upewnić się, że jest ona dostępna wszędzie tam, gdzie możesz potrzebować zbudować swój projekt ... potrzebuje tego administrator zespołu, a serwer CI tego potrzebuje. Z reguły powinieneś zawsze mieć możliwość klonowania repozytorium źródłowego i budowania bez żadnego dodatkowego wysiłku.

Nieprzestrzeganie katalogu Pods powoduje również ogromny ból głowy, jeśli często zmieniasz gałęzie. Teraz musisz uruchomić instalację pod za każdym razem, gdy zmieniasz oddziały, aby upewnić się, że twoje zależności są poprawne. Może to być mniej kłopotliwe, gdy twoje zależności ustabilizują się, ale na wczesnym etapie projektu jest to ogromne ograniczenie czasowe.

Co mam zignorować? Nic. Podfile, plik blokady i katalog Pods zostają zatwierdzone. Zaufaj mi, dzięki temu zaoszczędzisz wiele kłopotów. Jakie są minusy? Nieco większe repo? To nie koniec świata.

Luke Redpath
źródło
33
Jest to zdecydowanie sposób korzystania z CocoaPods. Jest to nie tylko część twojego źródła, ponieważ nie możesz bez niego budować, ale twoja „podstawowa aplikacja” jest również często sprzężona z kodem w CocoaPods. Bardzo ważne, aby wersjonowanie wiedziało dokładnie, która wersja zasobnika jest używana, a samo użycie Lockfile go nie wycina.
Joshua Gross
35
Łatwiej przy zmianie gałęzi i cofnięciu się w czasie ... To ogromny argument.
MonsieurDart
5
Tak, mógłbym rozwinąć tę kwestię bardziej szczegółowo, ale dla mnie zatwierdzenie w twoim repozytorium stanowi migawkę twojego źródła w czasie, a jeśli nie zatwierdzisz swojego katalogu Pods, duża część tej migawki nie istnieje. Możesz to złagodzić, określając bardzo dokładnie swoje wersje kapsuły, ale również weź to pod uwagę ... jeśli zaktualizujesz jeden ze swoich kapsułów, jeśli twoje kapsuły znajdują się w repozytorium, wtedy ta aktualizacja zostanie przechwycona w zatwierdzeniu i będzie w pełni możliwa do udostępnienia. Jeśli aktualizacja zasobnika powoduje błąd, można znacznie łatwiej zrozumieć, dlaczego podstawowa zmiana jest rejestrowana we własnym repozytorium.
Luke Redpath,
5
Myślę, że to jasne, że teraz jest to kwestia osobistego gustu. Ludzie tacy jak Seamus polaryzują teraz debatę ... to naprawdę niesprawiedliwe, aby powiedzieć, że nieuwzględnienie Podskatalogu sprawi ci ból, podczas gdy sprawdzanie go wiąże się również z własnym pakietem problemów. np. deweloper wpada na wersję zależności Podfilebez pamiętania o sprawdzeniu zaktualizowanych źródeł w Pods. Prawo Murphy'ego. pod installza każdym razem, gdy zmieniasz oddział, kosztujesz cenne ... DZIESIĘĆ sekund - ale to całkowicie eliminuje tę klasę problemów.
fatuhoku
14
It won't build without it!
Równie
155

Polecam używać gitignore Objective-C w GitHub . W szczególności najlepsze praktyki to:

  • Podfile Musi zawsze być pod kontrolą źródła.
  • Podfile.lock Musi zawsze być pod kontrolą źródła.
  • Obszar roboczy generowany przez CocoaPods powinien być pod kontrolą źródła.
  • Każda kapsuła, do której odnosi się :pathopcja, powinna być pod kontrolą źródła.
  • ./PodsFolderze może znajdować się pod kontrolą źródła.

Więcej informacji można znaleźć w oficjalnym przewodniku .

źródło: Jestem członkiem podstawowego zespołu CocoaPods, jak @alloy


Chociaż folder Pods jest artefaktem kompilacji, istnieją powody, które można wziąć pod uwagę, decydując się na zachowanie kontroli nad źródłem:

  • CocoaPods nie jest menedżerem pakietów, więc oryginalne źródło biblioteki może zostać w przyszłości usunięte przez autora.
  • Jeśli folder Pods jest objęty kontrolą źródła, nie trzeba instalować CocoaPods, aby uruchomić projekt, ponieważ wystarczyłoby kasy.
  • CocoaPods jest nadal w toku i istnieją opcje, które nie zawsze prowadzą do tego samego rezultatu (na przykład :headi :gitopcje i obecnie nie używają zatwierdzeń zapisanych w Podfile.lock).
  • Jest mniej punktów awaryjnych, jeśli możesz wznowić pracę nad projektem po średnio / długim czasie.
Fabio
źródło
5
Po co zawracać sobie głowę utrzymywaniem pliku obszaru roboczego? W każdym razie jest generowany przez Cocoapods.
fatuhoku
1
@fatuhoku Z moich doświadczeń wynika, że ​​dla serwerów testowych ciągłej integracji niewidocznych dla Cocoapods. Sprawdzam to wszystko, ponieważ nie mam dostępu do skryptu kompilacji dla mojego hosta CI (reguła biznesowa) i traktuję CocoaPods jako narzędzie programistyczne, a nie system kompilacji lub menedżer pakietów.
codepoet
1
Folder ./Pod NIE powinien znajdować się pod kontrolą źródła (jest generowany automatycznie) przez CocoaPods. Folder Pods jest artefaktem procesu kompilacji. Obszar roboczy można również usunąć z kontroli źródła, o ile nie ma innych projektów nie zarządzanych za pomocą CocoaPods.
Vlad
Myślę, że należy to sprawdzić, ponieważ za każdym razem, gdy wykonuję pociągnięcie, instalowanie kapsuł jest uciążliwe.
mskw
45

plik .gitignore

Żadna odpowiedź faktycznie nie oferuje .gitignore, więc oto dwa smaki.


Sprawdzanie w katalogu Pods ( Korzyści )

Git ignoruje przyjazne Xcode / iOS pomijanie plików systemowych Mac OS, Xcode, kompilacji, innych repozytoriów i kopii zapasowych.

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

Ignorowanie katalogu Pods ( Korzyści )

.gitignore: (dołącz do poprzedniej listy)

# Cocoapods
Pods/

Bez względu na to, czy sprawdzasz katalog Pods, Podfile i Podfile.lock powinny zawsze być pod kontrolą wersji.

Jeśli Podsnie są Podfileodprawieni, prawdopodobnie powinieneś poprosić o wyraźne numery wersji dla każdego Cocoapod. Dyskusja Cocoapods.org tutaj .

SwiftArchitect
źródło
38

Generalnie pracuję nad aplikacjami klientów. W takim przypadku dodam również katalog Pods do repozytorium, aby upewnić się, że w dowolnym momencie każdy programista może dokonać kasy, skompilować i uruchomić.

Gdyby to była nasza aplikacja, prawdopodobnie wykluczyłbym katalog Pods, dopóki nie będę nad nim pracował przez jakiś czas.

Właściwie muszę stwierdzić, że być może nie jestem najlepszą osobą, aby odpowiedzieć na twoje pytanie, w przeciwieństwie do poglądów czystych użytkowników :) Będę tweetować na ten temat z https://twitter.com/CocoaPodsOrg .

stop
źródło
Też to powtórzę. Możesz używać CocoaPods bez potrzeby korzystania z niego przez innych programistów (chociaż powinni), sprawdzając folder Pods. Gdy CocoaPods stanie się wszechobecny, strąki będą podobne do klejnotów, będziesz sprawdzać je w tych samych przypadkach, w których „sprzedajesz” rubiny.
Ben Scheirman
2
Myślę, że należy również wziąć pod uwagę, że czasami kapsuły lub narzędzie do kapsuły (dobra wersja) mogą nie być dostępne. Co więcej, jeśli dwóch użytkowników z inną wersją narzędzia pod uruchomi narzędzie dokładnie dla tego samego Podspec, wyniki mogą się różnić.
Adrian
1
Najważniejsze jest sprawdzenie, kompilacja i uruchomienie. Dlaczego miałbyś uzależnić swoją kompilację i zdolność do budowania od jakichkolwiek czynników zewnętrznych? Sprawdzam wszystkie strąki. Możesz zaoszczędzić innym programistom (lub przyszłej własnej) godzinie na szukaniu odpowiednich strąków. W żadnym z nich nie widzę żadnych wad.
n13
18

Sprawdzam wszystko. ( Pods/i Podfile.lock.)

Chcę móc sklonować repozytorium i wiedzieć, że wszystko będzie działało tak, jak podczas ostatniego użycia aplikacji.

Wolę sprzedawać rzeczy, niż ryzykować różne wyniki, które mogą być spowodowane inną wersją klejnotu lub zapisaniem historii w repozytorium kapsuły itp.

funroll
źródło
4
Inną miłą rzeczą jest to, że po aktualizacji możesz spojrzeć na różnicę przed zalogowaniem i zobaczyć dokładnie, co zmieniły się pliki w zasobnikach.
funroll
2
Dodatkowo, twój projekt nie wymaga od wszystkich programistów zainstalowania CocoaPods (co może być dobrą rzeczą, jeśli chcesz kontrolować, kto / jak zależności są dodawane i aktualizowane).
Tony Arnold,
18

Odpowiedź na to pytanie znajduje się bezpośrednio w dokumentach Cocoapod. Możesz spojrzeć na „ http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control

Niezależnie od tego, czy zaznaczysz folder Pods, zależy od Ciebie, ponieważ przepływy pracy różnią się w zależności od projektu. Zalecamy trzymanie katalogu Pods pod kontrolą źródła i nie dodawanie go do swojego .gitignore. Ale ostatecznie decyzja należy do Ciebie:

Korzyści ze sprawdzania w katalogu Pods

  • Po klonowaniu repozytorium projekt może natychmiast zbudować i uruchomić, nawet bez zainstalowania CocoaPods na maszynie. Nie ma potrzeby uruchamiania instalacji pod i nie jest wymagane połączenie z Internetem.
  • Artefakty kapsuły (kod / biblioteki) są zawsze dostępne, nawet jeśli źródło kapsuły (np. GitHub) miałoby spaść.
  • Po sklonowaniu repozytorium artefakty Kapsuły są identyczne z tymi w oryginalnej instalacji.

Korzyści z ignorowania katalogu Pods

  • Repozytorium kontroli źródła będzie mniejsze i zajmie mniej miejsca.

  • Tak długo, jak dostępne są źródła (np. GitHub) dla wszystkich kapsuł, CocoaPods jest w stanie odtworzyć tę samą instalację. (Technicznie nie ma gwarancji, że uruchomienie instalacji pod spowoduje pobranie i odtworzenie identycznych artefaktów, gdy nie używa się SHA zatwierdzenia w Podfile. Jest to szczególnie prawdziwe, gdy używa się plików zip w Podfile.)

  • Podczas wykonywania operacji kontroli źródła nie będzie żadnych konfliktów, takich jak łączenie oddziałów z różnymi wersjami Pod.

Bez względu na to, czy sprawdzasz katalog Pods, Podfile i Podfile.lock powinny zawsze być pod kontrolą wersji.

shah1988
źródło
13

Jestem w obozie programistów, którzy nie sprawdzają bibliotek, zakładając, że mamy dobrą kopię dostępną w innej lokalizacji. Tak więc w moim .gitignore dołączam następujące wiersze specyficzne dla CocoaPods:

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

Następnie upewniam się, że mamy kopię bibliotek w bezpiecznym miejscu. Zamiast (błędnie) używać repozytorium kodu projektu do przechowywania zależności (skompilowanych lub nie). Myślę, że najlepszym sposobem na to jest zarchiwizowanie kompilacji. Jeśli używasz serwera CI do swoich kompilacji (takich jak Jenkins), możesz trwale zarchiwizować wszystkie kompilacje, które są dla Ciebie ważne. Jeśli wykonujesz wszystkie kompilacje produkcyjne w lokalnym Xcode, nałóż na siebie archiwum swojego projektu dla wszystkich kompilacji, które musisz zachować. Coś w stylu: 1. Produkt -> Archiwum

  1. Dystrybucja ... Prześlij do iOS App Store / Save for Enterprise lub Ad-hoc Deployment / what you

  2. Ujawnij folder projektu w Finderze

  3. Kliknij prawym przyciskiem myszy i skompresuj „WhthingProject”

Zapewnia to obraz powykonawczy całego projektu, w tym kompletnych ustawień projektu i obszaru roboczego używanych do budowy aplikacji, a także dystrybucji binarnych (takich jak Sparkle, zastrzeżone zestawy SDK, takie jak TestFlight itp.), Niezależnie od tego, czy używają CocoaPods.

Aktualizacja: Zmieniłem zdanie na ten temat i teraz dokonuję Podfile.lockkontroli źródła. Jednak nadal uważam, że same kapsułki są artefaktami kompilacji i powinny być zarządzane jako takie poza kontrolą źródła, za pomocą innej metody, takiej jak serwer CI lub proces archiwizacji, jak opisano powyżej.

Alex Nauda
źródło
23
Cocoapods szczególnie zaleca odprawęPodfile.lock : docs.cocoapods.org/guides/working_with_teams.html
cbowns
Ciekawy. Ponieważ Podfile.lockpiec w ścieżkach do lokalnych strąków, nie zastanawiałem się nad dodaniem go do kontroli wersji. Jednak teraz, gdy o tym myślę, nie różni się on od lokalnych zmian, które wprowadzam, Podfileale nigdy nie zatwierdzam. Dzięki za zwrócenie na to uwagi.
Alex Nauda,
Czy zmieniło się to połączenie z zespołami? Nic nie wspomina o Podfile.lockpliku.
ingh.am
4
@ ing0 Myślę, że nowy link to ten
phi
Zaletą sprawdzania w pliku Podfile.lock jest to, że jest oczywiste, czy któreś z twoich zasobników lub ich zależności zostały uaktualnione.
Tim Potter,
11

Wolę zatwierdzić Podskatalog wraz z Podfilei Podfile.lockupewnić się, że każdy w moim zespole może sprawdzić źródło w dowolnym momencie i nie musi się o nic martwić ani robić dodatkowych rzeczy, aby działało.

Pomaga to również w scenariuszu, w którym naprawiono błąd w jednej z kapsuł lub zmodyfikowano niektóre zachowania zgodnie z potrzebami, ale zmiany te nie będą dostępne na innych komputerach, jeśli nie zostaną zatwierdzone.

I zignorować niepotrzebne katalogi:

xcuserdata/
nomann
źródło
10

Muszę powiedzieć, że jestem fanem angażowania kapsuł do repozytorium. Po kliknięciu już wspomnianego łącza otrzymasz dobry plik .gitignore, aby uzyskać dostęp do projektów Xcode na iOS, aby umożliwić korzystanie z Pod, ale także możesz je łatwo wykluczyć, jeśli chcesz: https://github.com/github/gitignore/ blob / master / Objective-C.gitignore

Moje powody, dla których jestem fanem dodawania kapsuł do repozytorium, są z jednego fundamentalnego powodu, którego nikt nie wydaje się zauważać. Co się stanie, jeśli biblioteka, od której tak zależy nasz projekt, zostanie nagle usunięta z sieci?

  • Może gospodarz zdecyduje, że nie chce już utrzymywać konta GitHub otwartego. Co się stanie, jeśli biblioteka ma kilka lat (na przykład więcej niż 5 lat), istnieje duże ryzyko, że projekt może nie być już dostępny u źródła
  • Kolejny punkt, co się stanie, jeśli zmieni się adres URL repozytorium? Powiedzmy, że osoba obsługująca kapsuła z konta GitHub decyduje się reprezentować siebie pod innym uchwytem - twoje URL-e kapsuły się zepsują.
  • Wreszcie kolejny punkt. Powiedz, jeśli jesteś programistą takim jak ja, który dużo koduje podczas lotu między krajami. Szybko pociągam za gałąź „master”, instaluję pod nią gałąź, siedząc na lotnisku i przygotowuję się na najbliższy 8-godzinny lot. Dostaję 3 godziny lotu i zdaję sobie sprawę, że muszę się zmienić na inny oddział ... „DOH” - brak informacji o zasobach, które są dostępne tylko w oddziale „master”.

Uwaga: należy pamiętać, że gałąź „master” dla rozwoju jest tylko dla przykładów, oczywiście gałęzie „master” w systemach kontroli wersji powinny być utrzymywane w czystości i możliwe do wdrożenia / budowy w dowolnym momencie

Myślę, że z nich migawki w twoich repozytoriach kodu są z pewnością lepsze niż ścisłe rozmiar repozytorium. I jak już wspomniano, plik podfile.lock - podczas gdy wersja kontrolowana da ci dobrą historię twoich wersji Pod.

Na koniec dnia, jeśli masz pilny termin, napięty budżet, liczy się czas - musimy być tak zaradni, jak to możliwe i nie marnować czasu na surowe ideologie, a zamiast tego wykorzystać zestaw narzędzi do współpracy - aby nasze życie było łatwiejsze i bardziej wydajne.

leewilson86
źródło
2
To jedna z najlepszych odpowiedzi na ponadczasowe pytanie „Czy sprawdzam swoje zależności w celu kontroli źródła”. Najpierw wyjaśnisz swoje konkretne uzasadnienie biznesowe oparte na ryzyku. Po drugie, przypominasz wszystkim, że na koniec dnia najlepszym rozwiązaniem jest to, co pozwala wykonać pracę i sprawia, że ​​ludzie pracują razem. Usuwasz religię z równania. Dobra robota!
Brandon
8

Na końcu od Ciebie zależy, jakie podejmiesz podejście.

Tak myśli o tym zespół Cocoapods:

Niezależnie od tego, czy zaznaczysz folder Pods, zależy od Ciebie, ponieważ przepływy pracy różnią się w zależności od projektu. Zalecamy trzymanie katalogu Pods pod kontrolą źródła i nie dodawanie go do swojego .gitignore. Ale ostatecznie decyzja należy do ciebie.

Osobiście chciałbym trzymać Pods z dala, jako moduły_węzłów, gdybym używał Węzła lub bower_components, jeśli użyłem Bowera . Dotyczy to prawie każdego menedżera zależności i jest to również filozofia stojąca za podmodułami git .

Czasami jednak możesz chcieć być naprawdę pewny co do najnowszego stanu zależności, w ten sposób posiadasz zależność w swoim projekcie. Oczywiście, jeśli to zrobisz, istnieje kilka wad, ale obawy dotyczą nie tylko Cocoapods, ale dotyczą każdego menedżera zależności.

Poniżej znajduje się dobra lista zalet / wad stworzona przez zespół Cocoapods oraz pełny tekst cytatu wspomnianego wcześniej.

Zespół Cocoapods: Czy powinienem sprawdzić katalog Pods w celu kontroli źródła?

zevarito
źródło
8

To zależy osobiście:

Dlaczego strąki powinny być częścią repozytorium (pod kontrolą źródła) i nie powinny być ignorowane

  • Źródło jest identyczne
  • Możesz go zbudować od razu (nawet bez kokosów)
  • Nawet jeśli kapsuła zostanie usunięta, nadal mamy jej kopię (Tak, może się to zdarzyć i tak się stało. W starym projekcie, w którym chcesz tylko niewielkiej zmiany, musisz zaimplementować nową bibliotekę, aby móc nawet zbudować).
  • pods.xcodeprojustawienia są również częścią kontroli źródła. Oznacza to, że np. Jeśli masz projekt swift 4, ale niektóre zasobniki muszą być dostępne, swift 3.2ponieważ nie zostały jeszcze zaktualizowane, ustawienia te zostaną zapisane. W przeciwnym razie ten, kto sklonował repo, popełniłby błędy.
  • Zawsze możesz usunąć strąki z projektu i uruchomić pod install, nie można tego zrobić odwrotnie.
  • Polecają to nawet autorzy Cocoapods.

Niektóre minusy: większe repozytorium, mylące różnice (głównie dla członków zespołu), potencjalnie więcej konfliktów.

Jakub Truhlář
źródło
2

Dla mnie największym zmartwieniem jest sprawdzenie w przyszłości źródła. Jeśli planujesz, aby Twój projekt trwał przez jakiś czas, a CocoaPods kiedykolwiek zniknie lub źródło jednego ze strąków spadnie, nie będziesz miał szczęścia, jeśli spróbujesz zbudować świeżo z archiwum.

Można to złagodzić za pomocą okresowych pełnych archiwów źródłowych.

Shawn
źródło
2

Sprawdź w kapsułach.

Myślę, że powinien to być dogmat tworzenia oprogramowania

  • Wszystkie kompilacje muszą być odtwarzalne
  • Jedynym sposobem na zapewnienie powtarzalności kompilacji jest kontrolowanie wszystkich zależności; sprawdzanie wszystkich zależności jest zatem koniecznością.
  • Nowy programista, zaczynając od zera, będzie mógł sprawdzić Twój projekt i rozpocząć pracę.

Dlaczego?

CocoaPods lub dowolne inne biblioteki zewnętrzne mogą ulec zmianie, co może zepsuć wszystko. Albo mogą się przenieść, zmienić ich nazwę lub całkowicie usunąć. Nie możesz polegać na Internecie, aby przechowywać rzeczy dla siebie. Twój laptop mógł umrzeć i wystąpił krytyczny błąd w produkcji, który należy naprawić. Główny programista może zostać potrącony przez autobus, a jego zastępca musi zacząć działać w pośpiechu. I chciałbym, żeby ten ostatni był teoretycznym przykładem, ale tak naprawdę wydarzyło się przy startupie, z którym byłem. ROZERWAĆ.

Teraz, realistycznie, nie można tak naprawdę sprawdzać WSZYSTKICH zależności. Nie można sprawdzić obrazu maszyny, której użyto do tworzenia kompilacji; nie można sprawdzić dokładnej wersji kompilatora. I tak dalej. Istnieją realistyczne ograniczenia. Ale melduj się wszystko, co możesz - nie robienie tego tylko utrudnia życie. I nie chcemy tego.

Ostatnie słowo: Strąki nie są artefaktami do budowania. Artefakty budowania są generowane z twoich kompilacji. Twoja kompilacja używa kapsuł, a nie ich generowania. Nie jestem nawet pewien, dlaczego należy to omówić.

n13
źródło
2

Plusy braku sprawdzania kontroli Pods/wersji (w subiektywnej kolejności ważności):

  1. Wiele łatwiej jest łączyć zatwierdzenia i sprawdzać różnice w kodzie. Scalanie jest powszechnym źródłem problemów w bazie kodu, a to pozwala skupić się tylko na rzeczach, które są istotne.
  2. Niektórzy losowi współpracownicy nie są w stanie samodzielnie edytować zależności i sprawdzać zmian, których nigdy nie powinni robić (i ponownie trudno byłoby ustalić, czy różnica jest ogromna). Edytowanie zależności jest bardzo złą praktyką, ponieważ ma przyszłośćpod install zmiany mogą zostać zablokowane.
  3. Rozbieżności między katalogiem Podfilea Pods/katalogiem są wykrywane szybciej wśród członków drużyny. Jeśli się zameldujesz Pods/i na przykład zaktualizujesz wersję w Podfile, ale zapomnisz uruchomić pod installlub wprowadzić zmiany w Pods/, będziesz miał o wiele trudniej zauważyć źródło rozbieżności. Jeśli Pods/nie jest zalogowany, zawsze musisz pod installmimo wszystko uruchomić .
  4. Mniejszy rozmiar repozytorium. Mniejszy bajt-ślad jest fajny, ale to nie ma wielkiego znaczenia w wielkim schemacie. Co ważniejsze: posiadanie większej liczby rzeczy w repozytorium również zwiększa obciążenie poznawcze. Nie ma powodu, aby mieć w repozytorium rzeczy, na które nie powinieneś patrzeć. Zapoznaj się z dokumentacją (abstrakcja), aby dowiedzieć się, jak coś działa, a nie z kodem (implementacja).
  5. Łatwiej rozróżnić, ile ktoś wnosi (ponieważ jego wiersze kodu nie zawierają zależności, których nie napisały)
  6. JARpliki .venv/(środowiska wirtualne) i node_modules/nigdy nie są uwzględniane w kontroli wersji. Gdybyśmy byli całkowicie agnostykiem o pytaniu, nie sprawdzając w Podsbędzie domyślnym na podstawie precedensu.

Wady braku odprawy wPods/

  1. Musisz uruchomić pod installpodczas przełączania gałęzi lub cofania zatwierdzeń.
  2. Nie można uruchomić projektu po prostu poprzez klonowanie repozytorium. Musisz zainstalować narzędzie pod, a następnie uruchomić pod install.
  3. Aby uruchomić pod install, musisz mieć połączenie z Internetem , a źródło strąków musi być dostępne.
  4. Jeśli właściciel zależności usunie swój pakiet, masz kłopoty.

Podsumowując, nie wliczając w Podskatalogu jest poręczy przeciwko więcej złych praktyk. Włącznie z PodsTworzy katalog prowadzenie projektu łatwiejsze. Wolę ten pierwszy od drugiego. Nie będziesz musiał rozmawiać z każdą nową osobą na temat projektu „czego nie robić”, jeśli nie ma możliwości popełnienia pewnych błędów. Podoba mi się również pomysł posiadania osobnej kontroli wersji, Podsktóra łagodzi wady.

efthimio
źródło
1

Teoretycznie powinieneś sprawdzić w katalogu Pods. W praktyce nie zawsze zadziała. Wiele zasobników znacznie przekracza limit rozmiaru plików github, więc jeśli używasz github, będziesz mieć problemy ze sprawdzaniem w katalogu Pods.

Matt
źródło
1

TL; DR: kiedy śledzisz Pods/folder, projekt jest łatwiejszy do pobrania. Kiedy go nie śledzisz, łatwiej jest ulepszyć, gdy pracujesz w zespole.

Chociaż organizacja Cocoapods zachęca nas do śledzenia Pods/ katalogu, mówią, że to deweloperzy decydują, czy zrobić to na podstawie tych zalet i wad:  http://guides.cocoapods.org/using/using-cocoapods.html # should-i-check-the-pods-directory-into-source-control

Osobiście zwykle śledzę Pods/ folder tylko w przypadku projektów, nad którymi nie będę dłużej pracował. W ten sposób każdy programista może szybko z niego skorzystać i kontynuować pracę przy użyciu odpowiedniej wersji cocoapods.

Z drugiej strony, myślę, że historia zatwierdzeń staje się czystsza i łatwiej jest scalić kod i przejrzeć kod innej osoby, gdy nie śledzisz Pods/ folderu. Zazwyczaj ustawiam wersję biblioteki cocoapod podczas instalacji, aby upewnić się, że każdy może zainstalować projekt przy użyciu tych samych wersji co ja.

Ponadto, gdy Pods/katalog jest śledzony, wszyscy deweloperzy muszą używać tej samej wersji Cocoapods, aby zapobiec zmianie dziesiątek plików przy każdym uruchomieniupod install aby dodać / usunąć kapsułę.

Konkluzja : podczas śledzenia Pods/folderu łatwiej jest pobrać projekt. Kiedy go nie śledzisz, łatwiej jest go ulepszyć.

marcelosalloum
źródło
0

Wydaje się, że dobrym sposobem na ustrukturyzowanie tego byłoby utworzenie katalogu „Pods” jako submodułu / osobnego projektu git, oto dlaczego.

  • Posiadanie podsystemów w repozytorium projektu, podczas pracy z kilkoma programistami, może powodować BARDZO DUŻE różnice w żądaniach ściągania, w których prawie niemożliwe jest zobaczenie faktycznej pracy, która została zmieniona przez ludzi (pomyśl, że dla bibliotek zmieniło się kilkaset tysięcy plików, a tylko kilka zmieniło się w rzeczywistym projekcie).

  • Widzę problem polegający na tym, aby nic nie popełniać, ponieważ osoba posiadająca bibliotekę może ją usunąć w dowolnym momencie, a ty jesteś w zasadzie SOL, rozwiązuje to również.

jaredpetker
źródło
0

Niezależnie od tego, czy zaznaczysz folder Pods, zależy od Ciebie, ponieważ przepływy pracy różnią się w zależności od projektu. Zalecamy trzymanie katalogu Pods pod kontrolą źródła i nie dodawanie go do swojego .gitignore. Ale ostatecznie decyzja należy do Ciebie:

Korzyści ze sprawdzania w katalogu Pods

  1. Po klonowaniu repozytorium projekt może natychmiast zbudować i uruchomić, nawet bez zainstalowania CocoaPods na maszynie. Nie ma potrzeby uruchamiania instalacji pod i nie jest wymagane połączenie z Internetem.
  2. Artefakty kapsuły (kod / biblioteki) są zawsze dostępne, nawet jeśli źródło kapsuły (np. GitHub) miałoby spaść.
  3. Po sklonowaniu repozytorium artefakty Kapsuły są identyczne z tymi w oryginalnej instalacji.

Korzyści z ignorowania katalogu Pods

  1. Repozytorium kontroli źródła będzie mniejsze i zajmie mniej miejsca. Tak długo, jak dostępne są źródła (np. GitHub) dla wszystkich kapsuł, CocoaPods jest w stanie odtworzyć tę samą instalację. (Technicznie nie ma gwarancji, że uruchomiona instalacja kapsuły pobierze i odtworzy identyczne artefakty, gdy nie będzie używać SHA zatwierdzenia w pliku podfile Jest to szczególnie prawdziwe, gdy używasz plików zip w Podfile.)
  2. Podczas wykonywania operacji kontroli źródła nie będzie żadnych konfliktów, takich jak łączenie oddziałów z różnymi wersjami Pod. Bez względu na to, czy sprawdzasz katalog Pods, Podfile i Podfile.lock powinny zawsze być pod kontrolą wersji.
Sourabh Mahna
źródło
Możesz użyć tego linku w przypadku jakichkolwiek wątpliwości: guide.cocoapods.org/using/…
Sourabh Mahna