Git и pbxproj - PullRequest
       50

Git и pbxproj

30 голосов
/ 11 октября 2009

Я смотрел на приложение Mac с открытым исходным кодом, и они дали некоторые рекомендуемые значения для .gitignore. Они были тем, чего я ожидал ...

Однако они также предложили запись в файл .gitattributes:

*.pbxproj -crlf -diff -merge

Я не самый знающий с точки зрения git, поэтому мне было интересно - каковы преимущества добавления этой строки? Что конкретно делает? Я видел это только в этом одном проекте , и если бы это была обычная практика, я бы ожидал увидеть это где-то еще прямо сейчас. Поэтому мне было любопытно, как это конкретно относится к файлу pbxproj.

Ответы [ 4 ]

27 голосов
/ 11 октября 2009

Файл pbxproj на самом деле не подходит для человеческого объединения. Хотя это простой текст ASCII, это форма JSON. По сути, вы хотите рассматривать его как двоичный файл.

Вот что делают отдельные флаги:

-crlf: не использовать преобразование crlf <=> cr

-diff: не дифференцировать файл

-merge: не пытаться объединить файл

Из книги Pro Git Скотта Чакона

Некоторые файлы выглядят как текстовые файлы, но для всех намерений и целей должны быть рассматривается как двоичные данные. Например, Проекты Xcode на Mac содержат файл, заканчивающийся на .pbxproj, который в основном JSON (простой текст формат данных javascript) набор данных записаны на диск IDE, записывает ваши настройки сборки и так далее. Хотя это технически текстовый файл, потому что это все ASCII, вы не хотите относиться к нему как таковой, потому что это действительно легкая база данных - вы не может объединить содержимое, если два человека изменил его, и различия, как правило, не полезно. Файл предназначен для потребляется машиной. По сути вы хочу рассматривать это как двоичный файл.

7 голосов
/ 28 апреля 2010

Разница часто полезна во время коммита, чтобы проверить, что было изменено. Поэтому я считаю полезным сохранить способность рассеивания, но просто предотвратить слияние. Поэтому я использую это в моем файле .gitattributes:

*. Pbxproj -crlf -merge

С другой стороны, кто-нибудь пробовал использовать merge = union для файлов pbxproj? Смотрите: Должен ли я объединять файлы .pbxproj с git, используя merge = union?

3 голосов
/ 03 августа 2014

Я написал сценарий Python с именем xUnique , чтобы решить эту проблему конфликтов слияния.

Этот скрипт выполняет следующие действия:

  • замените все 24 символа UUID на уникальные 325-значные дайджесты MD5 для всего проекта и удалите все неиспользуемые UUID (обычно вызванные неосторожным объединением ранее). Это предотвратит дублирование UUID, потому что разные машины / Xcode генерируют разные UUID в этом файле. XCode распознает это, и проект может быть открыт. Во время этого процесса удалите все недопустимые строки в файле проекта
  • сортировка файла проекта. Я написал python-версию из sort-Xcode-project-file от команды Webkit с более новыми функциями:
    • поддержка сортировки PBXFileReference и PBXBuildFile секций
    • удалить дубликаты файлов / ссылки
    • избегайте создания нового файла, даже если не было внесено никаких изменений, после использования этого скрипта происходит меньше коммитов

Более подробную информацию и обновления xUnique см. На README

0 голосов
/ 02 августа 2018

Я столкнулся с проблемой повреждения файла *.pbxproj после разрешения конфликтов слияния вручную. Или, чаще всего, мои файлы просто «исчезали» из рабочего дерева после слияния. Это сводило меня с ума, потому что мы работаем в команде, так что вы можете себе представить, насколько грязно это может стать очень быстро.

Итак, я протестировал merge=union, и пока он работает хорошо. Я знаю, что это не может помочь, если файлы были удалены или переименованы в одно и то же время, но для добавления новых файлов это работает как ожидалось: нет конфликтов, и файлы не исчезают после слияния. И это также экономит немало времени.

Если вы хотите попробовать, вот что я сделал.

1) Создайте глобальный файл .gitattributes. Запустить в терминале:

touch ~/.gitattributes
git config --global core.attributesfile ~/.gitattributes

2) Эта команда должна открыть его в текстовом редакторе:

open ~/.gitattributes

3) Когда файл откроется, добавьте эту строку и сохраните файл:

*.pbxproj binary merge=union

Готово. Надеюсь, что это поможет новым читателям, как это помогло мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...