对Mac“捆绑”文件进行版本控制的最佳方法

时间:2008-08-25 22:13:59

标签: macos version-control bundle

所以你知道很多Mac应用使用“捆绑”:它看起来像是你的应用程序的单个文件,但它实际上是一个包含许多文件的文件夹。

对于要处理此问题的版本控制系统,需要:

  • 检查目录中的所有文件,以便应用程序可以根据需要进行修改
  • 在签到,
    • 提交已修改的文件
    • 添加应用程序已创建的新文件
    • 标记为已删除的文件(自应用程序删除后)
    • 将此作为一个原子变更进行管理

有关使用现有版本控制系统处理此问题的最佳方法的任何想法?是否有任何版本控制系统在这方面更擅长?

4 个答案:

答案 0 :(得分:2)

Mercurial特定版本基于文件,而不是目录结构。因此,您的工作树(一个完全成熟的存储库)不会在每个级别上吐出.svn文件夹。

这也意味着被替换的目录(如应用程序或其他Bundle)仍将在版本控制下找到具有特定文件名的内容。监控文件名,而不是inode或任何类似的东西!

显然,如果将新文件添加到Bundle中,则需要将其显式添加到存储库中。同样,从Bundle中删除文件应该使用'hg rm'。

OS X还没有任何像样的Mercurial GUI,但如果您只是添加/ commit / merge,那么使用命令行就不那么难了。

答案 1 :(得分:1)

对于像git和mercurial这样的分布式SCM系统应该不是马修提到的问题。

如果您需要使用像Subversion或CVS这样的集中式SCM,那么您可以在将它们检入源代码管理之前压缩(存档)您的软件包。这可能是痛苦的,需要额外的一步。在Tapestry Central有一篇关于此的好文章:

Mac OS X bundles vs. Subversion

本文演示了一个管理归档的ruby脚本。

答案 2 :(得分:1)

未来的更新:

如果我记得,在SVN中管理捆绑包的问题是每次捆绑时都会清除所有.svn文件夹。现在SVN将所有内容存储在根目录下的单个.svn文件夹中,这不应该成为问题。

答案 3 :(得分:1)

将这个帖子带回日光,因为2013年10月的iWork(Pages 5.0等)不再允许以“平面文件”(zipped)存储,而只能作为捆绑包存储。

问题不在于在这样的结构中创建版本控制隐藏文件夹(对于svn来说是这样),但正如Mark在问题中所说:获取或删除文件的自动原子更新(通过应用程序,在这种情况下是iWork)所以我不需要手动执行此操作。

显然,iWork和Apple只受iCloud可用性的困扰。然而,我有一个真正的案例,用于在Mercurial仓库中存储.pages,.numbers和.keynote。更新后,它将一切都分开了。怎么办?

<强>附录:

发现'hg addremove'可以解决这个问题。

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

add all new files, delete all missing files