核心数据版本控制和SVN

时间:2012-05-22 16:20:57

标签: objective-c xcode svn core-data version-control

我使用Xcode存储库来处理svn,今天我在我的核心数据模型中添加了一个新版本并尝试提交它。但Xcode通过错误:

svn: Commit failed (details follow):
svn: Entry for '/Users/user/Desktop/project/Core Data/Translator.xcdatamodeld/Translator 2.0.xcdatamodel/contents' is marked as 'copied' but is not itself scheduled
for addition.  Perhaps you're committing a target that is
inside an unversioned (or not-yet-versioned) directory?

我认为问题在于svn将xcdatamodel作为玩家进行处理,并且由于它已被更改,因此它不再受版本控制。但那我该怎么办呢?不提交新模型并手动传输吗?)

2 个答案:

答案 0 :(得分:1)

我建议编写一个subversion checkout / commit钩子,它将创建Translator.xcdatamodeld目录的zip或tar存档,然后检查它。实际的xcdatamodeld目录将被忽略。 (压缩存档可能最好,因为压缩会使svn更难以计算差异并使存储库更大。)

答案 1 :(得分:-1)

问题是当你从第一个数据模型开始时,Xcode会创建一个文件,让我们说:     myProject.xcdatamodeld

假设您通过菜单编辑器>创建。添加模型版本,这是名为_myProject_v2_的模型的第二个版本。 Xcode实际上做的是:它创建一个名为原始模型的文件夹,并将原始模型复制到子文件夹中,然后使用包含新版本的文件创建第二个子文件夹:

myProject.xcdatamodeld
    |
    +- myProject.xcdatamodel
    |           |
    |           +- contents (a file containing the actual model)
    |
    +- myProject_v2.xcdatamodel
                |
                +- contents (a file containing the 2nd version of the model)

所以SVN感到困惑,因为他认为是一个文件(原始的myProject.xcdatamodeld)并存储在SVN中,现在是一个带有子文件夹的文件夹。 而且,这些由XCode创建的子文件夹最终会获得隐藏的 .svn 文件夹..所以我的解决方案是:

  1. 从SVN删除文件夹 myProject.xcdatamodeld
  2. 做其余的提交
  3. 关闭Xcode并重命名您的文件夹项目:eh:_projectFolder_old _
  4. 检查项目,希望不会有 myProject.xcdatamodeld
  5. 从xcode中创建一个名为 myProject 的虚假数据模型。不要在模型中创建任何东西,这是没用的
  6. 版本,编辑器>添加模型版本
  7. 关闭XCode
  8. 在Finder中打开 myProject.xcdatamodeld 中的旧数据模型(鼠标右键,显示包内容
  9. 在Finder中打开您的原始模型,并将内容文件从* projectFolder_old / myProject.xcdatamodeld / myProject.xcdatamodel *复制到新项目: projectFolder / myProject.xcdatamodeld / myProject.xcdatamodel (您需要执行一些显示包内容
  10. 重复第二个版本,将内容文件从* projectFolder_old / myProject.xcdatamodeld / myProject_v2.xcdatamodel *复制到新项目:* projectFolder / myProject.xcdatamodeld / myProject_v2.xcdatamodel *
  11. 重新打开Xcode并检查一切是否正确
  12. 将文件添加到svn,如果尚未添加,则执行提交