最佳的Mac“bundle”文件版本控制方法

6
所以你知道许多Mac应用程序使用"bundles":它看起来像是一个单一的文件,但实际上是一个包含许多文件的文件夹。
为了使版本控制系统处理这个问题,它需要:
  • 检出目录中的所有文件,以便应用程序可以根据需要修改它们
  • 在checkin时,
    • 提交已修改的文件
    • 添加应用程序创建的新文件
    • 标记为删除的文件(因为应用程序已将其删除)
    • 将此管理为一个原子更改
有没有任何关于如何使用现有版本控制系统处理这个问题的最佳方法?哪些版本控制系统在这方面更加熟练?
4个回答

2

Mercurial 特别版本是基于文件而非目录结构的。因此,您的工作树(即一个完整的仓库)不会在每个级别输出 .svn 文件夹。

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

显然,如果向 Bundle 添加了新文件,则需要将其明确添加到您的仓库中。同样,从 Bundle 中删除文件应该使用 'hg rm' 命令来完成。

目前还没有适用于 OS X 的好用的 Mercurial 图形用户界面,但如果您只是进行添加/提交/合并操作,使用命令行并不难。


1

来自未来的更新:

如果我没记错,使用SVN管理bundle的问题在于每次创建bundle时都会清除所有的.svn文件夹。现在这不再是问题了,因为SVN将所有内容存储在单个位于根目录的.svn文件夹中。


1
自从2013年10月iWork(Pages 5.0等)不再允许存储在“平面文件”(zipped)中,而只能作为包时,将此线程带回日光下。
问题不在于在这种结构内创建版本控制隐藏文件夹(对于svn而言),而是如Mark在问题中所说:获取自动的、原子性的更新以添加或删除文件(由应用程序,在此情况下是iWork),这样我就不需要手动操作。
显然,iWork和Apple只关心iCloud的可用性。然而,我有一个真正的问题,需要将.pages、.numbers和.keynote存储在Mercurial repo中。更新后,它会彻底破坏一切。该怎么办?
补充说明:
找到“hg addremove”可以为我解决问题。
$ hg help addremove
hg addremove [OPTION]... [FILE]...

add all new files, delete all missing files

1

对于像git和mercurial这样的分布式SCM系统,就像Matthew提到的那样,不应该有问题。

如果您需要使用像Subversion或CVS这样的集中式SCM,则可以在将其检入源代码控制之前将其捆绑成zip文件(存档)。这可能很痛苦并且需要额外的步骤。 Tapestry Central上有一篇很好的博客文章介绍了这个问题:

Mac OS X bundles vs. Subversion

本文演示了一个Ruby脚本,可为您管理归档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接