2008-08-25 61 views
6

所以,你知道很多Mac应用程序的使用“包”:它看起来像一个单一的文件到您的应用程序,但实际上它里面很多文件的文件夹。最佳途径版本的Mac“捆绑”文件

对于一个版本控制系统来处理这个问题,它需要:

  • 退房目录中的所有文件,因此应用程序可以根据需要进行
  • 在签修改,
    • 已修改的提交文件
    • 添加应用程序创建的新文件
    • 标记为不再存在的已删除文件(因为应用程序删除)
    • 管理这个作为一个原子的变化

与现有的版本控制系统来处理这一点的最好办法的任何想法?任何版本控制系统在这方面都更擅长?

回答

1

对于像git和mercurial这样的分布式SCM系统来说,不应该像Matthew所说的那样是个问题。

如果你需要使用像颠覆或CVS的集中式SCM,那么你可以检查他们到源代码控制之前拉上(存档),您的包。这可能是痛苦的,需要一个额外的步骤。这是一个很好的博客文章关于这个在挂毯中心:

Mac OS X bundles vs. Subversion

本文演示了管理归档你的Ruby脚本。

2

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

这也意味着被替换,如应用程序或其他捆绑一个目录,还是会发现它与版本控制下的特定文件名的内容。文件名被监控,而不是inode或任何类似的花式!

显然,如果一个新的文件添加到包,你需要明确地添加到您的存储库。同样,从Bundle中删除文件应该用'hg rm'来完成。

有没有什么像样的水银GUI的OS X呢,但如果你做的是添加/提交/合并,它并不难使用的命令行。

1

从未来的更新:

如果我还记得,在SVN管理包的问题是,你赚了一大笔钱每次所有的.svn目录得到清除。这应该不再是问题了,现在SVN将所有内容都存储在根目录下的单个.svn文件夹中。

1

瞻该线程返回到日光,由于2013年10月的iWork(页数5.0等)不再允许存储在“平面文件”(压缩),但只作为束。

问题是不是在这样的结构内创建版本控制隐藏文件夹(对于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