故事板从git工作流的角度来看,当多个人共同协作时,可能会带来一些麻烦。例如,.storyboard文件中的XML具有其起始<document>
标签的 toolsVersion
和systemVersion
属性,这些属性会随着最近的文件操作者所运行的配置而被改变。精确同步每个人的Xcode版本似乎可以帮助解决toolsVersion
的问题,但是systemVersion
则无论如何都会发生改变,这取决于开发者正在运行的具体Mac和/或OS X版本。
这很愚蠢,但大多数情况下是无害的。令我们担忧的是,在其他时间,通过git pull
后打开Storyboards时会自动对Storyboard进行一些其他更改。也就是说,Alice修改了Storyboard,提交并将其推送到存储库。然后Bob拉取了Alice的更改,并打开Storyboard进行进一步的修改。他打开Storyboard的那一刻,文件图标立即变成了已修改但未保存状态,而且git status
显示出现了许多奇怪的更改。所有这些在Bob没有进行任何更改或保存文件的情况下就发生了。
<classes>
标签层次结构。我们还没有弄清楚是什么原因导致了这种情况。我们可能有几个本地化版本的storyboard存储在各种.lproj目录中,当在Interface Builder中打开它们时,类层次结构可能会在某些版本中自动被移除并添加到其他版本,或者在某些版本中保持不变。这会在git diff
中产生很多噪音,但实际上并不会破坏任何功能。我们经常会选择性地将我们所做的实际更改添加到git的索引中,提交这些更改,然后丢弃这些自发的、毫无意义的<classes>
更改。这样做是为了保持提交小而精致,就像它们应该的那样。然而,最终这变得太麻烦了,因为Xcode一直在重新进行更改,有人就一气之下提交了这些更改以及其他一些东西……这没问题,直到其他人的Xcode因为没有明显的原因想要将它们改回去。(我们的提交历史记录中有很多关于这个问题的诅咒。)还有其他人看到这种行为吗?这是Xcode的一个bug还是我们某个或多个开发者Mac上的配置问题?我们在与XIB文件协作时也看到了一些类似的行为,但是storyboard似乎更容易出现这种情况。