Что входит в ваш файл .gitignore, если вы используете CocoaPods?

StackOverflow https://stackoverflow.com/questions/9446644

  •  12-11-2019
  •  | 
  •  

Вопрос

Я занимаюсь разработкой iOS уже пару месяцев и только что узнал о многообещающем Кокосовые моллюски библиотека для управления зависимостями.

Я опробовал это в личном проекте:добавлена зависимость к Киви к моему подфайлу, запустил pod install CocoaPodsTest.xcodeproj, и вуаля, это сработало великолепно.

Единственное, о чем мне остается только гадать, это:что я должен проверить, а что игнорировать для контроля версий?Кажется очевидным, что я хочу проверить сам Podfile и, вероятно, также файл .xcworkspace;но должен ли я игнорировать каталог Pods/?Есть ли другие файлы, которые будут сгенерированы в будущем (когда я добавлю другие зависимости), которые я также должен добавить в свой .gitignore?

Это было полезно?

Решение

Лично я не проверю каталог и содержимое Pods.Я не могу сказать, что провел долгие века, учитывая последствия, но мои рассуждения - это что-то вроде:

Подфиль относится к определенному мету или или коммитируют каждую зависимость, чтобы сами Стручки могли быть созданы из подфила, Ergo они больше похожи на промежуточный продукт сборки, чем источник, и, следовательно, не нуждается в контроле версий вмой проект.

Другие советы

Я совершаю свой каталог Pods. Я не согласен с тем, что каталог PODS - это сборка Arteact. На самом деле я бы сказал, что это определенно нет. Это часть вашего источника приложения: оно не будет строить без него!

Легче подумать о Cocoapods в качестве инструмента разработчика, а не инструментом сборки. Он не создает ваш проект, он просто клонирует и устанавливает ваши зависимости для вас. Необходимо иметь возможность установить Cocoapods, чтобы просто построить ваш проект.

, делая какоапод. Зависимость вашей сборки, вам теперь нужно убедиться, что он доступен везде, где вам может потребоваться создать свой проект ... Admin Admin требует его, ваш сервер CI нуждается в этом. Как правило, вы должны, как правило, всегда смогу клонировать вашу репозиторий источника и строить без каких-либо дополнительных усилий.

Не совершение каталога Pods также создает массивную головную боль, если вы часто переключаете ветки. Теперь вам нужно запустить POD Установить каждый раз, когда вы переключаете ветки, чтобы убедиться, что ваши зависимости являются правильными. Это может быть меньше хлопот, поскольку ваши зависимости стабилизируются, но в начале проекта это массивная раковина.

Так, что я игнорирую? Ничего. Podfile, файл блокировки и каталог Pods все предан. Поверьте мне, это спасет вас много хлопот. Какие минусы? Немного большего репо? Не конец света.

Я рекомендую использовать Цель GitHub-C gitignore.В деталях, наилучшими практиками являются:

  • То Podfile должен всегда будьте под контролем исходного кода.
  • То Podfile.lock должен всегда будьте под контролем исходного кода.
  • Рабочее пространство, созданное CocoaPods должен находиться под контролем исходного кода.
  • Любой модуль, на который ссылается :path вариант должен находиться под контролем исходного кода.
  • То ./Pods папка мочь находиться под контролем исходного кода.

Для получения дополнительной информации вы можете обратиться к официальный путеводитель.

источник:Я являюсь членом основной команды CocoaPods, как и @alloy


Хотя папка Pods является артефактом сборки, есть причины, которые вы могли бы учитывать при принятии решения о том, следует ли сохранять ее под контролем исходного кода:

  • CocoaPods не является менеджером пакетов, поэтому исходный код библиотеки может быть удален автором в будущем.
  • Если папка Pods включена в систему управления версиями, нет необходимости устанавливать CocoaPods для запуска проекта, поскольку будет достаточно проверки.
  • CocoaPods все еще находится в стадии разработки, и есть варианты, которые не всегда приводят к одному и тому же результату (например, :head и :git параметры в настоящее время не используют фиксации, хранящиеся в Podfile.lock).
  • Будет меньше точек сбоя, если вы сможете возобновить работу над проектом по истечении среднего/длительного периода времени.

файл .gitignore

Ответа нет на самом деле предлагает .gitignore, итак, вот два варианта.


Проверка в каталоге модулей (Выгоды)

Дружественный к Xcode / iOS git игнорирует, пропуская системные файлы Mac OS, Xcode, сборки, другие репозитории и резервные копии.

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

Игнорирование каталога Pods (Выгоды)

.gitignore: (добавить к предыдущему списку)

# Cocoapods
Pods/

Независимо от того, проверяете ли вы каталог Pods, Podfile и подфайл.блокировка всегда должна находиться под контролем версий.

Если Pods не зарегистрированы, ваш Podfile вероятно, следует запросить явные номера версий для каждого Cocoapod.Cocoapods.org обсуждение здесь.

Я вообще работаю над приложением клиентов.В этом случае я также добавляю каталог PODS в REPO, чтобы убедиться, что в любой момент времени какой-то разработчик может выполнить проверку и строить и запускать.

Если бы это было нашим собственным приложением, я бы, вероятно, исключаю каталог PODS, пока я не буду работать на нем некоторое время.

На самом деле, я должен сделать вывод, что я не могу быть лучшим человеком, чтобы ответить на ваш вопрос, по сравнению с видом на чистые пользователи :) Я твитвиюсь по этому вопросу из

Ответ на этот вопрос дан непосредственно в документации Cocoapod.Вы можете посмотреть "http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control"

Независимо от того, зарегистрируется ли вы в папке Pods, зависит от вас, так как рабочие процессы варьируются от проекта к проекту.Мы рекомендуем вам сохранить каталог PODS под управлением источника и не добавляйте его в свой .gitignore.Но в конечном итоге это решение зависит от вас:

Преимущества проверки в каталоге Pods

  • После клонирования репозитория проект можно сразу собрать и запустить, даже если на компьютере не установлен CocoaPods.Нет необходимости запускать установку POD, и подключение к Интернету не требуется.
  • Артефакты модуля (код/библиотеки) всегда доступны, даже если источник модуля (например,GitHub) должны были выйти из строя.
  • Артефакты Pod гарантированно будут идентичны артефактам исходной установки после клонирования репозитория.

Преимущества игнорирования каталога Pods

  • Репозиторий системы контроля версий будет меньше и займет меньше места.

  • Пока источники (например.GitHub) для всех модулей Pods доступны, CocoaPods обычно может воссоздать одну и ту же установку.(Технически нет никакой гарантии, что управляемая установка POD будет получать и воссоздать идентичные артефакты, когда не использует коммитировку SHA в Podfile.Это особенно актуально при использовании zip-файлов в подфайле.)

  • При выполнении операций управления источниками не будет никаких конфликтов, таких как слияние ветвей с разными версиями POD.

Независимо от того, зарегистрируетесь ли вы в каталоге PODS, Podfile и Podfile.lock всегда следует хранить под контролем версий.

Я проверю все.(Генеракодицетагкод и генеракодицетагкод.)

Я хочу быть в состоянии клонировать репозиторий и знать, что все просто будет работать, так как в прошлый раз я использовал приложение.

Я бы предпочел поставщику вещей, чем риск, имея разные результаты, которые могут быть вызваны различной версией GEM, или кто-то, кто переписывает историю в репозитории POD и т. Д.

Я в лагере разработчиков, которые не проверяют библиотеки, предполагая, что у нас хорошая копия доступна в другом месте. Итак, в моем .gitignore я включаю следующие строки, специфичные для Cocoapod:

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

Затем я убедитесь, что у нас есть копия библиотек в безопасном месте. А не (mis-) используйте репозиторий кода проекта для хранения зависимостей (скомпилированных или нет), я думаю, что лучший способ сделать это - это архивировать сборки. Если вы используете сервер CI для ваших сборки (например, jenkins), вы можете навсегда архивировать какие-либо сборки, которые важны для вас. Если вы выполняете все свои производственные сборки в вашем локальном Xcode, привыкнуть к архиву вашего проекта для любых созданий, которые вам необходимо сохранить. Что-то вроде: 1. Продукт -> Архив

  1. Распространение ... отправьте в iOS App Store / Сохранить для предприятия или Ad-Hoc развертывание / Что вы

  2. Раскрыть папку проекта в Finder

  3. Щелкните правой кнопкой мыши и compless "NateProject"

    Это обеспечивает встроенное изображение всего проекта, включая полные настройки проекта и рабочих областей, используемые для создания приложения, а также двоичных дистрибутивов (например, Sparkle, запатентованные SDK, такие как Testflight и т. Д.) Используйте Cocoapods.

    UPDATE: Я передумал на этом, и теперь делаю коммит Podfile.lock для контроля источника. Тем не менее, я все еще верю, что сами стручки создают артефакты и должны управляться как таковые вне контроля источника, через другой метод, такой как ваш CI Server или процесс архива, как я опишу выше.

Я предпочитаю комбинировать каталог Pods вместе с RenacodicetacodCode и Podfile, чтобы убедиться, что кто-либо в моей команде может оформить должность источника в любое время, и им не нужно ничего беспокоиться или делать дополнительные вещи, чтобы сделать его работать.

Это также помогает в сценарии, где вы исправили ошибку внутри одного из стручков или изменили некоторые поведения в соответствии с вашими потребностями, но эти изменения не будут доступны на других машинах, если они не будут преданы.

и игнорировать ненужные каталоги:

xcuserdata/
.

Надо сказать, я поклонник совершения стручков к репозитории. После уже упомянутой ссылки даст вам хороший файл .gitignore, чтобы встать на ваши проекты XCode для iOS, чтобы позволить подводам, но и для вас, чтобы легко исключить их, если вы так пожелаете: http://github.com/github/gitignore/blob/master/objective-c.gitignore

Мои рассуждения для того, чтобы быть поклонником добавления стручков к репозитории, предназначено для одной фундаментальной причины, на которой никто, кажется, не собирается, что произойдет, если библиотека, которую наш проект настолько зависит от, внезапно удален из Интернета?

    .
  • может быть, хост решает, что больше не хотят держать свой Github Откройте учетную запись Что произойдет, если библиотека скажет несколько лет (например, старше 5 лет) существует высокий риск Проект больше не может быть доступен в источнике
  • также другой момент, что происходит, если URL к репозитории изменения? Позвольте сказать, что человек, обслуживающий стручок из своего github аккаунт, решает представить себя под другой ручкой - URL-адреса ваших стручков ломаются.
  • , наконец, другой момент. Скажи, если вы разработчик, как я, который много делает кодирования, когда на полете между странами. Я быстро тяну «Мастер» филиал, сделайте POD, установите на этой ветке, сидя В аэропорту и у меня все установлено на предстоящие 8 часа полет. Я получаю 3 часа в мой рейс, и понимаю, что мне нужно перейти к Другая филиал .... «DOH» - отсутствуют информации POD, которая доступна только на «главной» ветке.

    NB ... Обратите внимание, что «главный» филиал для разработки - только для примеров, очевидно, «главные» филиалы в системах управления версиями, должны храниться в чистоте и развертывании / выполнении в любое время

    Я думаю, что из этих снимков в ваших репозиториях кода, безусловно, лучше, чем быть строгим по размеру репозитория. И как уже упоминалось, файл Podfile.lock - во время контролируемой версии даст вам хорошую историю ваших версий POD.

    В конце дня, если у вас есть прессовый крайний срок, жесткий бюджет, время имеет сущность - мы должны быть максимально находчивыми, а не тратить время на строгие идеологии, а вместо этого использовать набор инструментов работать вместе - чтобы наша жизнь была более эффективной.

В конце зависит от вас подход, который вы принимаете.

Это то, что команда Cocoapod считает об этом:

Если вы проверяете ли вы в папке Pods, зависит от вас, как Рабочие процессы варьируются от проекта для проекта. Мы рекомендуем, чтобы вы сохраняли Каталог Pods под контролем источника, и не добавляйте его в свой .gitignore. Но в конечном итоге это решение зависит от вас.

Лично я хотел бы сохранить pods out, как node_modules Если бы я использовал узел или bower_components Если бы я использовал Bower . Это применимо практически для любого менеджера зависимостей там, и является философией для подмодулей GIT .

Однако иногда вы можете быть действительно уверены в том, что «Эм> - современные определенной зависимости, то, как вы несите собственную зависимость в вашем проекте. Конечно, есть несколько недостатков, которые применяются, если вы это сделаете, но проблемы применяются не только на Cocoapods, которые применяются к любой диспетчере зависимости.

Ниже приведен хороший список Pros / Conss , сделанный командой Cocoapods, а также полный текст цитаты, упомянутой ранее.

Команда Cocoapods: Должен ли я проверить каталог PODS в исходное управление?

Это зависит лично от меня:

Почему модули должны быть частью репозитория (под управлением source control) и не должны игнорироваться

  • Источник идентичен
  • Вы можете построить его прямо сейчас как есть (даже без кокосовых стручков)
  • Даже если модуль удален, у нас все равно есть его копия (Да, это может случиться, и это произошло.В старом проекте, где вы хотите внести лишь небольшое изменение, вам нужно было бы внедрить новую библиотеку, чтобы иметь возможность даже создавать).
  • pods.xcodeproj настройки также являются частью системы управления версиями.Это означает, например.если у вас есть проект в swift 4, но некоторые капсулы должны быть в swift 3.2 поскольку они еще не обновлены, эти настройки будут сохранены.В противном случае тот, кто клонировал репозиторий, в конечном итоге получил бы ошибки.
  • Вы всегда можете удалить модули из проекта и запустить pod install, обратного сделать нельзя.
  • Даже тот авторы из кокосовых моллюсков рекомендую именно это.

Некоторые минусы:больший репозиторий, запутанные различия (в основном для членов команды), потенциально больше конфликтов.

Для меня самая большая проблема - это будущее подтверждение вашего источника.Если вы планируете проверить свой проект на некоторое время, а Cocoapods когда-либо уходит, или источник одного из стручков идет вниз, вы совершенно не удачаете, если пытаться построить свежую из архива.

Это может быть смягчено с периодическими архивалами полного источника.

Проверьте в стручках.

Я думаю, что это должно быть принцип разработки программного обеспечения

    .
  • Все сборки должны быть воспроизводимы
  • единственный способ обеспечить воспроизводимый должен быть под контролем всех зависимостей; Проверка во всем Поэтому зависимости необходимо.
  • Новый разработчик, начинающийся с царапины, сможет проверить свой проект и начать работать.

    Почему?

    Cocoapod или любые другие внешние библиотеки могут измениться, что может сломать вещи. Или они могут двигаться, или быть переименованы или быть вообще удалены. Вы не можете полагаться на Интернет, чтобы хранить вещи для вас. Ваш ноутбук может умер, и в производстве есть критическая ошибка, которая должна быть исправлена. Главный разработчик может попасть на автобус, а его замена должна начать спешить. И я желаю, чтобы последний был теоретическим примером, но это на самом деле произошло в стартапе, с которым я был. RIP.

    Теперь реально вы не можете проверить все зависимости. Вы не можете проверить изображение машины, который вы использовали для создания сборки; Вы не можете проверить точную версию компилятора. И так далее. Есть реалистичные пределы. Но проверьте во всем, что вы можете - не делать это просто делает вашу жизнь сложнее. И мы не хотим этого.

    Последнее слово: Pods не строят артефакты. Создание артефактов - это то, что генерируется из ваших сборки. Ваша сборка использует стручки, не генерировать их. Я даже не уверен, почему это должно быть обсуждено.

Теоретически, вы должны проверить в каталоге PODS.На практике это не всегда будет работать.Многие стручки хорошо превышают ограничение размера файлов GitHub, поэтому, если вы используете GitHub, вы собираетесь проверить проверку проблем в каталоге PODS.

Плюсы нет регистрация Pods/ для контроля версий (в субъективном порядке важности):

  1. Много проще объединять коммиты и просматривать различия в коде.Слияние является распространенным источником проблем в базе кода, и это позволяет вам сосредоточиться только на том, что имеет отношение к делу.
  2. Какой-нибудь случайный участник не может сам отредактировать зависимости и проверить внесенные изменения, чего он никогда не должен делать (и опять же, было бы трудно определить, является ли разница огромной).Редактирование зависимостей - очень плохая практика, потому что будущее pod install это могло бы скрыть изменения.
  3. Расхождения между Podfile и Pods/ каталоги быстрее находят среди товарищей по команде.Если вы зарегистрируетесь Pods/ и, например, обновите версию в Podfile, но забываешь бежать pod install или проверьте изменения в Pods/, вам будет гораздо труднее заметить источник расхождения.Если Pods/ не зарегистрирован, вам всегда нужно запускать pod install в любом случае.
  4. Меньший размер репозитория.Иметь меньший объем памяти в байтах - это хорошо, но в общей схеме это не имеет большого значения.Что еще более важно:наличие большего количества объектов в репозитории также увеличивает вашу когнитивную нагрузку.Нет никаких причин иметь в репозитории вещи, на которые вам не следует смотреть.Обратитесь к документации (абстракции), чтобы узнать, как что-то работает, а не к коду (реализации).
  5. Легче определить, насколько кто-то вносит свой вклад (поскольку внесенные им строки кода не будут включать зависимости, которые они не писали)
  6. JAR файлы, .venv/ (виртуальные среды), и node_modules/ никогда не включаются в систему управления версиями.Если бы мы были полными агностиками в этом вопросе, нет регистрация Pods было бы значение по умолчанию, основанное на прецеденте.

Минусы нет проверка в Pods/

  1. Ты должен бежать pod install при переключении ветвей или возврате коммитов.
  2. Вы не можете запустить проект, просто клонировав репозиторий.Вы должны установить инструмент pod, затем запустить pod install.
  3. Для запуска у вас должно быть подключение к Интернету pod install, и источник модулей должен быть доступен.
  4. Если владелец зависимости удаляет свой пакет, у вас проблемы.

Подводя итог, не включая то Pods каталог - это ограждение от новых плохих практик. Включая то Pods каталог упрощает запуск проекта.Я предпочитаю первое второму.Вам не нужно будет расспрашивать каждого нового участника проекта о том, "что нет что делать", если нет возможности совершить определенные ошибки с самого начала.Мне также нравится идея иметь отдельный элемент управления версиями для Pods что смягчает минусы.

Похоже, хороший способ структурировать это действительно будет иметь каталог «PODS» в качестве подмодуля Git / отдельный проект, вот почему.

    .
  • Наличие стручков в вашем проекте REPO, при работе с несколькими разработчиками может вызвать очень большие дифференцировки в запросах на тягу, где почти невозможно увидеть фактическую работу, которая была изменена людьми (думать, что несколько сотен до тысячи файлов изменилисьДля библиотек, и только несколько изменились в фактическом проекте).

  • Я вижу проблему не совершения чего-либо для git, поскольку человек, владеющий библиотекой, может снять его в любое время, и вы по сути, это также решает это.

Будете ли вы проверять папку Pods или нет, зависит от вас, поскольку рабочие процессы варьируются от проекта к проекту.Мы рекомендуем вам оставить каталог Pods под контролем исходного кода и не добавлять его в свой .gitignore.Но в конечном итоге это решение зависит от вас:

Преимущества проверки в каталоге Pods

  1. После клонирования репозитория проект можно сразу собрать и запустить, даже если на компьютере не установлен CocoaPods.Нет необходимости запускать установку pod и подключение к Интернету не требуется.
  2. Артефакты модуля (код/библиотеки) всегда доступны, даже если источник модуля (например,GitHub) должны были выйти из строя.
  3. Артефакты Pod гарантированно будут идентичны артефактам исходной установки после клонирования репозитория.

Преимущества игнорирования каталога Pods

  1. Репозиторий системы контроля версий будет меньше и займет меньше места.Пока источники (например.GitHub) для всех модулей Pods доступны, CocoaPods обычно может воссоздать одну и ту же установку. (Технически нет никакой гарантии, что запуск установки модуля будет извлекать и воссоздавать идентичные артефакты, если не использовать SHA фиксации в файле Podfile.Это особенно актуально при использовании zip-файлов в подфайле.)
  2. Не возникнет никаких конфликтов при выполнении операций управления версиями, таких как объединение ветвей с разными версиями Pod.Независимо от того, проверяете ли вы каталог Pods, Podfile и Podfile.lock всегда должны находиться под контролем версий.

TL;DR:когда вы отслеживаете Pods/ папка, из которой легче выбрать проект.Когда вы не отслеживаете это, вам легче совершенствоваться, когда вы работаете в команде.

Хотя организация Cocoapods призывает нас отслеживать Pods/ directory, они говорят, что разработчики сами должны решить, делать это или нет, основываясь на этих плюсах и минусах:http://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control

Лично я обычно отслеживаю Pods/ папка только для проектов, над которыми я какое-то время больше не буду работать.Таким образом, любой разработчик может быстро воспользоваться им и продолжить работу, используя соответствующую версию cocoapods.

С другой стороны, я думаю, что история коммитов становится чище, и проще объединить код и просмотреть код другого человека, когда вы не отслеживаете Pods/ папка.Обычно я устанавливаю версию библиотеки cocoapod при ее установке, чтобы убедиться, что любой желающий может установить проект, используя те же версии, что и я.

Кроме того, когда Pods/ каталог отслеживается, все разработчики должны использовать одну и ту же версию Cocoapods, чтобы предотвратить изменение десятков файлов при каждом запуске pod install чтобы добавить/удалить модуль.

Нижняя линия:когда вы отслеживаете Pods/ папка, из которой легче выбрать проект.Когда вы не отслеживаете это, вам легче совершенствоваться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top