对 Mac“捆绑”文件进行版本控制的最佳方法
-
09-06-2019 - |
题
所以你知道很多 Mac 应用程序都使用“捆绑包”:对于您的应用程序来说,它看起来像是一个文件,但实际上它是一个包含许多文件的文件夹。
对于要处理此问题的版本控制系统,它需要:
- 检出目录中的所有文件,以便应用程序可以根据需要修改它们
- 办理登机手续时,
- 提交已修改的文件
- 添加应用程序创建的新文件
- 将不再存在的文件标记为已删除(因为应用程序删除了它们)
- 将其作为一个原子更改来管理
关于使用现有版本控制系统处理此问题的最佳方法有什么想法吗?是否有任何版本控制系统更擅长该领域?
解决方案
对于像 git 和 Mercurial 这样的分布式 SCM 系统,正如 Matthew 提到的那样,不应该成为问题。
如果您需要使用像 Subversion 或 CVS 这样的集中式 SCM,那么您可以在将包签入源代码管理之前将其压缩(归档)。这可能会很痛苦并且需要采取额外的步骤。Tapestry Central 有一篇关于此的很好的博客文章:
本文演示了一个为您管理归档的 ruby 脚本。
其他提示
Mercurial 的特定版本基于文件,而不是目录结构。因此,您的工作树(一个成熟的存储库)不会在每个级别都生成 .svn 文件夹。
这也意味着被替换的目录(例如应用程序或其他捆绑包)仍然会在修订控制下找到具有特定文件名的内容。监视的是文件名,而不是索引节点或类似的东西!
显然,如果将新文件添加到捆绑包中,您需要将其显式添加到您的存储库中。同样,从捆绑包中删除文件应该使用“hg rm”来完成。
目前还没有适用于 OS X 的任何像样的 Mercurial GUI,但如果您所做的只是添加/提交/合并,那么使用命令行并不难。
来自未来的更新:
如果我记得的话,在 SVN 中管理捆绑包的问题是每次创建捆绑包时所有 .svn 文件夹都会被清除。这应该不再是问题,因为 SVN 将所有内容存储在根目录下的单个 .svn 文件夹中。
让这个线程回到白天,因为 2013 年 10 月的 iWork(Pages 5.0 等)不再允许存储在“平面文件”(压缩)中,而只能作为捆绑包存储。
问题不在于在此类结构中创建版本控制隐藏文件夹(对于 svn 来说是这样),而是 标记 在问题中说:获得添加或删除的文件的自动、原子更新(由应用程序,在本例中为 iWork),因此我不需要手动执行此操作。
显然,iWork 和苹果只关心 iCloud 的可用性。然而,我有一个在 Mercurial 存储库中存储 .pages、.numbers 和 .keynote 的真实案例。更新后,一切都崩溃了。该怎么办?
附录:
成立 'hg addremove
'这对我有用。
$ hg help addremove
hg addremove [OPTION]... [FILE]...
add all new files, delete all missing files