Лучшие подходы к версионированию Mac-файлов - PullRequest
6 голосов
/ 26 августа 2008

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 26 августа 2008

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

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

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

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

1 голос
/ 01 ноября 2013

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

Проблема не в создании скрытых папок контроля версий внутри таких структур (ну, для svn это так), а в том, что Mark говорит в вопросе: получение автоматического, атомарного обновления файлов, добавленных или удаленных (приложением, в данном случае 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
1 голос
/ 16 февраля 2013

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

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

1 голос
/ 28 августа 2008

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

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

Пакеты Mac OS X против Subversion

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

...