【发布时间】:2012-10-25 08:27:11
【问题描述】:
从 git 工作流程的角度来看,当多人协作时,故事板是相当痛苦的。例如,.storyboard 文件中的 XML 的起始 <document> 标记的 toolsVersion 和 systemVersion 属性会被最新的文件操纵器碰巧正在运行的任何配置更改。精确同步每个人的 Xcode 版本似乎对toolsVersion 有所帮助,但systemVersion 无论如何都会发生变化,具体取决于开发人员运行的特定 Mac 和/或 OS X 版本。
这是愚蠢的,但大多是无害的。然而,让我们担心的是,在其他时候,只需在 git pull 之后打开故事板,就会自动对故事板进行一些其他更改。也就是说,Alice 对故事板进行更改,提交并将它们推送到存储库。然后 Bob 提取 Alice 的更改并打开情节提要以进行进一步的更改。在他打开故事板的那一刻,文件图标立即变为已修改但未保存的状态,git status 表明发生了许多奇怪的变化。所有这一切都无需 Bob 更改任何内容或自己保存文件。
我们看到的最常见的自动更改是故事板文件末尾附近的整个 <classes> 标签层次结构消失或重新出现。我们还没有弄清楚是什么原因造成的。我们可能在不同的 .lproj 目录中有几个本地化版本的故事板,当在 Interface Builder 中打开它们时,类层次结构可能会自发地从一些中删除并添加到其他目录中,或者在某些目录中单独存在。这会在git diff 中引起很多噪音,但实际上并没有破坏任何功能。我们通常会选择性地将我们所做的实际更改添加到 git 的索引中,提交这些更改,然后丢弃自发的、无意义的 <classes> 更改。这是为了保持提交小而漂亮,因为它们应该是。但是,最终,由于 Xcode 不断地重新进行更改,并且有人只是愤怒地提交它们以及其他一些东西......这很好,直到其他人的 Xcode 决定想要将它们改回没有明显的原因。 (我们的提交历史对此有很多咒骂。)
还有其他人看到这种行为吗?这是我们的一台或多台开发人员 Mac 上的 Xcode 错误还是配置问题?我们在与 XIB 文件协作时看到了一些类似的行为,但情节提要似乎更容易受到这种影响。
【问题讨论】:
-
确实 Xcode 项目和 Git 并没有很好地结合在一起。除了丢弃不必要的更改之外,我认为您无法避免这种混乱——这些更改几乎总是对我来说是项目文件的更改,而我确定我没有更改其他 xml 文件。如果有任何“解决方案”,我会很高兴。我喜欢 Perforce,因为它方便的锁定功能不允许 Xcode 更改太多,这可能可以手动完成,用于您不会更改但仅用于查看的文件。
-
不值得将故事板与 git 或其他任何东西一起使用。它们的设计初衷不是对提交友好。我们放弃并选择了 .xib,它也不是那么好,但至少它是细粒度的。
-
我们发现故事板实际上可以很好地处理很多事情,尽管通常需要将它们与 XIB 混合使用。如果这个错误得到修复,我们会很乐意在绝大多数时间与他们合作。
-
我只需要评论 ahwulf 的评论:你到底是什么意思他们不友好?它们是 XML/文本文件,这与您可以获得的提交友好度差不多。而且我对故事板和版本控制系统没有任何问题,唯一的问题当然是 xcode 有时会删除
标记,然后再读取它,但是如果您查看更改,您可以轻松看到这一点适用于任何 dvcs 的 git GUI 或 git -p 或等效项。我从来没有在 .pbxproj 文件中发生过这种情况,仅供参考。 -
如果xcode可以通过读取类文件生成这些块,我无法理解为什么xcode将类块放在情节提要中?它们是一种“缓存”吗?如果是这样,它们应该放在 classes.cache 文件中,这样我们就可以将它从版本控制中排除...
标签: ios xcode interface-builder storyboard xib