从git工作流程的角度来看,当多人协作时,Storyboard就是一个皇家痛苦。例如,.storyboard文件中的XML的开始<document>
标记的toolsVersion
和systemVersion
属性可以通过运行最新文件操纵器的任何配置进行更改。同步每个人的Xcode版本似乎对toolsVersion
有所帮助,但是systemVersion
无论如何都会改变,具体取决于开发人员正在运行的特定Mac和/或OS X版本。
这是愚蠢的,但基本上无害。但是,令我们担心的是,有时在git pull
之后打开故事板,会自动对故事板进行一些其他更改。也就是说,爱丽丝对情节提要进行更改,然后提交并推送到存储库。然后,Bob拉出Alice的更改,并打开情节提要进行进一步更改。他打开情节提要的那一刻,文件图标立即变为已修改但未保存的状态,并且git status
显示发生了许多奇怪的更改。所有这一切都没有Bob更改任何内容或自己保存文件。
我们看到的最常见的自动更改是故事板文件结尾附近的整个<classes>
标签层次消失或重新出现。我们还没有弄清楚是什么原因造成的。我们可能在不同的.lproj目录中有多个故事板的本地化版本,并且在Interface Builder中打开它们时,类层次结构可能会自发地从某些类中删除并添加到其他类中,或者单独留在某些类中。这会在git diff
中引起很多噪音,但实际上并没有破坏任何功能。我们通常会选择性地将实际所做的更改添加到git的索引中,提交这些更改,然后仅丢弃自发的,毫无意义的<classes>
更改。这是为了使提交尽可能小巧,美观。最终,尽管如此,由于Xcode不断重复所做的更改,这变得太麻烦了,而有人只是将它们与其他内容一起进行了批处理……这很好,直到其他人的Xcode决定不做任何更改。明显的原因。 (我们的提交历史对此有很多咒骂。)
还有其他人看到此行为吗?这是我们的一台或多台开发人员Mac上的Xcode错误还是配置问题?与XIB文件协作时,我们已经看到了类似的行为,但是情节提要似乎更容易受到这种影响。
这不是错误,这是Xcode处理情节提要文件的结果。我正在为情节提要文件(GitHub link)编写一个diff和merge程序,并且花了数小时来分析情节提要文件逻辑以及Xcode如何对其进行处理。这是我发现的:
这是XCode 4.5+中的错误,我希望它已得到修复,是的,它是PITA。
通过在Xcode的任何生成文件(包括情节提要,XIB,Core Data模型和项目文件)中非常明智地使用git add -p
,可以在某种程度上缓解此问题,所有这些文件均遭受类似的短暂修改,而这些修改不会对实际的界面/模型/项目。
这里给出另一个答案,因为这种情况已大大改善。表示StoryBoard的XIB文件的XML已大大简化。
知道为什么
在同一情节提要板上工作不是问题。但是在同一个viewcontroller上进行操作会在拉/合并时产生冲突,这令人恐惧。我们真的不能避免为大型团队在同一ViewController中工作。