iOS iOS 开发中使用 git 团队协作 nib 文件如果冲突了这修复你们怎么做的?

hlxwell · 2013年04月10日 · 最后由 linktoming 回复于 2013年07月04日 · 12256 次阅读

nib 文件一般都是用 xcode 编辑器完成的,很少去写 xml 代码去弄的吧。冲突解决不是囧死了?

nib 是个大坑,我们现在都是直接用代码创建各种 view

是啊,团队开发似乎只有这个办法了。什么东西的位置都自己算好,然后直接代码布局上去。

storyboard 我想没什么人用吧。那个东西就弄弄简单的应用,全自定义化的话,根本没啥用。

你进入 xml 模式编辑一下不就可以了,你说的是 xib 吧?

去年我们开发了三个月后就都把 xib 拿掉了,还有那个维护文件的 pbxproj 在折磨人。

还好还好,偶尔折腾一下,一般冲突就 3, 4 处,小写的观察,修复还算容易。

@_kaichen 是啊。project 那个文件才是最折磨人的,每个人几乎每次提交都会改变点。可以说是 merge 必冲突的。

#6 楼 @hlxwell 越多人开发越痛苦,Conflict 的时候 XCode 还很容易挂

手工 fix conflict。。也不是特别麻烦 还有就是尽量大家不同时动一个 xib 咯。。

把 xib 拆得很细,弄很多个 view controller ??

另外,关于 nib 和 xib 这两个词... xib 是编译前的 xml 文本格式,nib 是编译后的二进制格式,比 xib 小得多

手工 merge。Commit often, commit more.

nib 和 Storyleboard 是有很多缺点,但在许多场合下也非常有用(当然我们开发时也大部分是直接用代码写)。相对于开发一些界面和特效时花的时间精力,合并冲突这点困难太小 case 了。

我项目中用的是 StoryBoard. 推荐方式:

  1. StoryBoard | nib 文件不做同步
  2. StoryBoard | nib 每个文件只由一个人修改。 StackOverflow 上有篇说这个问题的主题: http://stackoverflow.com/questions/11538510/storyboards-and-svn-conflicts

StoryBoard Best Pratice :(需要轻功) http://robsprogramknowledge.blogspot.com/2012/01/uistoryboard-best-practices.html

#7 楼 @_kaichen 在 Xcode 外改项目文件时先把它关掉。这玩意儿处理不了 xcodeproj 的重加载。

匿名 #14 2013年04月12日

不用 nib

#11 楼 @ashchan 我也是认为得时常提交才能有效避免冲突

别说 xib,就是一般的 source code 文件,频繁出现两人同时修改的情况,就应该反思以下,是这个 class/文件是不是该拆分以下了,或者是不是和 partener 分工不太协调。

我们的经验是:

  1. 在 UI 的动态条件不是太多的情况下,用 xib 能更加直观、更易维护,另外对 universal(iphone/ipad) 支持起来也方便。
  2. 单 xib 包含的 view 复杂度,应该根据实际情况进行调整,宜小不宜大。有公用的就抽取出来。

至于冲突的情况

  1. 大规模增删项目文件,应跟 partener 打好招呼,让他们先 check-in, 防止 project 文件冲突。
  2. xib 文件最好自己修改自己的

一般规模的 iOS 项目,三个 coder 以上就该分角色了 (UI/交互层/动画效果), coding 时大家各忙各的。

对于.xcodeproj 文件我们的做法是:每个人在提交前用脚本对里面的 project.pbxproj 做排序,然后提交,里面节点顺序的不一致是导致冲突的主要原因。或许对于 xib 文件也可以做对应的处理防止冲突。

#10 楼 @luikore 最近整啥产品,经验这么老道了。教えてください

#17 楼 @lldong 啥脚本。分享一下吧

#18 楼 @hlxwell 依然填坑中...

#21 楼 @lldong Thanks.

还有好多似乎挺好用的脚本啊

匿名 #23 2013年07月04日

用 multiple storyboard,一个人写一个

倒是项目文件有时候需要 merge,冲突了手动 merge xml 也还可以 没有想象的那么乱

匿名 #24 2013年07月04日

#21 楼 @lldong 然后放到 Git hook 里?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号