Git Merging Binary Files (в частности, файлы проекта Xcode) - PullRequest
7 голосов
/ 18 января 2010

У меня есть проект Xcode под git, и у меня есть "экспериментальная" ветка от моей "главной" ветки. С тех пор обе ветви разошлись (так что нет быстрой пересылки!), И я объединяю «экспериментальную» с моей «главной» ветвью.

Я настроил файл .gitattributes для обработки определенного файла XCode (project.pbxproj) как двоичного, так как он должен рассматриваться как таковой. Однако я не уверен, как именно это слить. Я не уверен, что делает этот конкретный файл, но если, например, он обрабатывает, какие файлы были добавлены в проект, я не могу объединить их, и поэтому мне придется вручную добавлять определенные файлы обратно в проект (возможно, нет вспоминая их всех). Как другие справляются с этой ситуацией?

Кроме того, я читал, что вы должны вручную обновлять двоичные файлы (очевидно) или копировать в разные версии. Однако, как только я попал в процесс слияния, файл в моей рабочей копии становится «главной» версией. Как я могу получить доступ к "экспериментальной" версии? Я не могу проверить это, так как это нарушит процесс слияния.

Спасибо за ваше время!

1 Ответ

9 голосов
/ 18 января 2010

Как правило, для двоичных файлов я рекомендую тип копирования-слияния .gitattribute директива .
То есть я просто копирую файл, полученный с удаленного конца слияния.

Однако для файлов .pbxproj это может быть не очень хорошим вариантом, так как описанное здесь .

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

Мне нравятся файлы проектов версий (например, для Eclipse ), только если я знаюони:

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

Короче говоря, если эти файлы не должны быть объединены (или будут объединены только тривиально), я хочу, чтобы они были в VCS.В вашем случае, может быть, не очень полезно иметь их в упомянутой VCS.


Примечание: как упомянуто в руководстве Git :

Во время слияния индекс содержит три версии каждого файла.Каждый из этих трех «этапов файла» представляет отдельную версию файла:

$ git show :1:file.txt  # the file in a common ancestor of both branches
$ git show :2:file.txt  # the version from HEAD.
$ git show :3:file.txt  # the version from MERGE_HEAD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...