1

我使用 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 视为 dolder,并且由于它已更改,因此不再受版本控制。但那我该怎么办?不要提交新模型并手动传输?)

4

2 回答 2

1

我建议编写一个 subversion checkout/commit 挂钩,该挂钩将创建 Translator.xcdatamodeld 目录的 zip 或 tar 存档,然后将其签入。实际的 xcdatamodeld 目录将被忽略。(最好不要压缩存档,因为压缩只会使 svn 更难计算差异并使您的存储库更大。)

于 2012-05-22T16:29:31.187 回答
-1

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

假设您通过菜单Editor > Add Model Version创建了名为 _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 (您将需要执行几个Show Package Contents
  10. 重复第二个版本,将内容文件从 *projectFolder_old/myProject.xcdatamodeld/myProject_v2.xcdatamodel* 复制到新项目:*projectFolder/myProject.xcdatamodeld/myProject_v2.xcdatamodel*
  11. 重新打开 Xcode 并检查一切是否正确
  12. 添加到 svn 文件,如果尚未添加,并执行提交
于 2012-12-03T11:50:50.207 回答