Сведения о вопросе

SOON

22:00, 25th August, 2020

Теги

Лучшие подходы к версионированию файлов Mac "bundle"

Просмотров: 461   Ответов: 4

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

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

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

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



  Сведения об ответе

SILA

15:35, 12th August, 2020

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

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

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

Для OS X пока нет приличных Mercurial GUIs, но если все, что вы делаете, - это add/commit/merge, то использовать командную строку не так уж и сложно.


  Сведения об ответе

SKY

02:25, 14th August, 2020

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

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

Мак ОС х пачек и подрывной деятельности

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


  Сведения об ответе

LAST

23:24, 27th August, 2020

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

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


  Сведения об ответе

SSESION

09:23, 28th August, 2020

Возвращая эту нить к дневному свету, начиная с октября 2013 года iWork (страницы 5.0 и т. д.) больше не позволяет хранить в 'flat file' (zipped), но только в виде пакетов.

Проблема заключается не в создании скрытых папок управления версиями внутри таких структур (ну, для 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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться