Наилучшие подходы к управлению версиями файлов Mac “bundle”
-
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