所以你知道很多Mac应用使用“捆绑”:它看起来像是你的应用程序的单个文件,但它实际上是一个包含许多文件的文件夹。
对于要处理此问题的版本控制系统,需要:
有关使用现有版本控制系统处理此问题的最佳方法的任何想法?是否有任何版本控制系统在这方面更擅长?
答案 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