Наилучшие подходы к управлению версиями файлов Mac “bundle”

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Итак, вы знаете, что многие приложения для Mac используют "пакеты".:Для вашего приложения это выглядит как один файл, но на самом деле это папка со множеством файлов внутри.

Чтобы система контроля версий справилась с этим, ей необходимо:

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

Есть идеи о наилучшем способе справиться с этим с помощью существующих систем контроля версий?Является ли какая-либо из систем управления версиями более опытной в этой области?

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

Решение

Для распределенных SCM-систем, таких как git и mercurial, это не должно быть проблемой, как упоминал Мэтью.

Если вам нужно использовать централизованную SCM, такую как Subversion или CVS, то вы можете заархивировать свои пакеты, прежде чем проверять их в системе управления версиями.Это может быть болезненным и требует дополнительного шага.Об этом есть хороший пост в блоге Tapestry Central:

Пакеты для Mac OS X противПодрывная деятельность

В этой статье демонстрируется скрипт ruby, который управляет архивированием за вас.

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

Mercurial в определенных версиях основан на файле, а не на структуре каталогов.Таким образом, ваше рабочее дерево, которое является полноценным репозиторием, не выдает папки .svn на каждом уровне.

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

Очевидно, что если в пакет добавляется новый файл, вам нужно будет явно добавить его в свой репозиторий.Аналогично, удаление файла из пакета должно выполняться с помощью 'hg rm'.

Пока нет ни одного приличного графического интерфейса Mercurial для OS X, но если все, что вы делаете, это добавляете / фиксируете / объединяете, использовать командную строку не так уж сложно.

Обновление из будущего:

Насколько я помню, проблема с управлением пакетами в SVN заключалась в том, что все папки .svn очищались каждый раз, когда вы создавали пакет.Это больше не должно быть проблемой, теперь, когда SVN хранит все в одной папке .svn в корневом каталоге.

Возвращая эту тему к дневному свету, поскольку iWork от октября 2013 года (страницы 5.0 и т.д.) Больше не позволяет хранить ее в "плоском файле" (заархивированном), а только в виде пакетов.

Проблема заключается не в создании системой контроля версий скрытых папок внутри таких структур (ну, для svn это так), а в том, что Отметка говорится в вопросе:получение автоматического, атомарного обновления добавляемых или удаленных файлов (приложением, в данном случае iWork), поэтому мне не нужно было бы делать это вручную.

Очевидно, что iWork и Apple беспокоит только удобство использования iCloud.Тем не менее, у меня есть настоящий кейс для хранения .pages, .numbers и .keynote в репозитории Mercurial.После обновления это разносит все в клочья.Что же делать?

Добавление:

Найден 'hg addremove- для меня это делает свое дело.

$ hg help addremove
hg addremove [OPTION]... [FILE]...

add all new files, delete all missing files
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top