iOS git merge 冲突解决时的project.pbxproj冲突怎么解决

iOS git merge时的project.pbxproj冲突怎么解决_百度知道查看: 1331|回复: 6
xcode中的project.pbxproj冲突怎么解决
用git/svn等工具协作时,如果甲乙两人都同时修改了*项目结构*,则project.pbxproj会冲突.网上看了下这个文件不能直接文本合并,应该当作二进制文件处理,这样的话,只能以一个的改动为准,另一个手工修改项目结构.每次这么处理都很麻烦,有没有很好的解决方法?&&
这个问题我太熟悉了,基本上天天遇到,说一下我是怎么处理的:project.pbxproj就是一个文本文件(不是binary),这个文件描述了这个project里面到底由什么文件构成,如何组织,project setting也在其中,倘若两个人同时在某一个版本节点上都进行了修改,例如增删文件等行为,那么保存/提交就会出现冲突,如果是svn就会强制在文件中给你加上&&&&& 还有&&&搜到了删了这些乱七八糟的东西,恢复原状就没事了。XIB其实也是文本文件,遇到冲突也可以这样解决。
git和svn都应该有ignore设置,比如在git下叫做.gitignore文件,我的常用.gitignore文件如下:._.DS_Storebuild*.pbxuser*.perspectivev3*.mode1v3.DS_Store*.lock.svnUserInterfaceState.xcuserstatexcuserdata*.class*.swp.pyc应该不是二进制的,但是需要手工合并,那么还是手工合并吧
一般冲突的时候就revert掉自己本地的,然后重新添加自己新建的文件。如果改动很多就把Class目录从工程里面Delete掉,记得删除References而不是从磁盘删除。然后重新添加Class目录就ok了。
我们用的是git.一般都是各自在工程中建立文件,添加文件到工程中,这些冲突。一旦有了这些冲突后.pbxproj可能就打不开了。我们都是先查看冲突的地方,再用编辑器打开.pbxproj文件,搜索&&&&这样类似文本,删掉你不需要的。当..pbxproj文件可以打开时就用xcode打开,删除冲突的地方。
这个问题总是一直比较蛋疼……我们用的解决方案是需要增加文件时先增加完空文件后立刻checkin一次,让别人每次改动 pbxproj的时候改动之前checkout一次,保证有交叉时间是可能性最小
开发的时候经常碰到,由于是文本文件,所以都是手工合并解决掉。有一个技巧,就是席浩洋所说的,即添加或改动文件布局时先更新,改完后要立即提交,团队成员都遵照这个约定。
Powered by 科技台 X3.2
kejitai Inc.iOS开发中使用git团队协作 nib文件如果冲突了这修复你们怎么做的? · Ruby China
nib文件一般都是用xcode编辑器完成的,很少去写xml代码去弄的吧。冲突解决不是囧死了?
nib是个大坑,我们现在都是直接用代码创建各种view
是啊,团队开发似乎只有这个办法了。什么东西的位置都自己算好,然后直接代码布局上去。
storyboard我想没什么人用吧。那个东西就弄弄简单的应用,全自定义化的话,根本没啥用。
你进入xml模式编辑一下不就可以了, 你说的是xib吧 ?
去年我们开发了三个月后就都把xib拿掉了,还有那个维护文件的pbxproj在折磨人。
还好还好,偶尔折腾一下,一般冲突就 3, 4 处,小写的观察,修复还算容易。
是啊。project那个文件才是最折磨人的,每个人几乎每次提交都会改变点。可以说是merge必冲突的。
越多人开发越痛苦,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 上有篇说这个问题的主题:
StoryBoard Best Pratice :(需要轻功)
在 Xcode 外改项目文件时先把它关掉。这玩意儿处理不了 xcodeproj 的重加载。
我也是认为得时常提交才能有效避免冲突
别说xib,就是一般的source code文件,频繁出现两人同时修改的情况,就应该反思以下,是这个class/文件是不是该拆分以下了,或者是不是和partener分工不太协调。
我们的经验是:
在UI的动态条件不是太多的情况下,用xib能更加直观、更易维护,另外对universal(iphone/ipad)支持起来也方便 。
单xib包含的view复杂度,应该根据实际情况进行调整,宜小不宜大。有公用的就抽取出来。
至于冲突的情况
1. 大规模增删项目文件,应跟partener打好招呼,让他们先check-in, 防止project文件冲突。
2. xib文件最好自己修改自己的
一般规模的iOS项目,三个coder以上就该分角色了(UI/交互层/动画效果),
coding时大家各忙各的。
对于.xcodeproj文件我们的做法是:每个人在提交前用脚本对里面的project.pbxproj做排序,然后提交,里面节点顺序的不一致是导致冲突的主要原因。或许对于xib文件也可以做对应的处理防止冲突。
最近整啥产品,经验这么老道了。教えてください
啥脚本。分享一下吧
依然填坑中...
check this out
还有好多似乎挺好用的脚本啊
用multiple storyboard,一个人写一个
倒是项目文件有时候需要merge,冲突了手动merge xml也还可以 没有想象的那么乱
然后放到Git hook里?
后方可回复, 如果你还没有账号请点击这里 。
共收到 24 条回复1795人阅读
iOS 辅助工具(25)
The project.pbxproj contains all of the metadata about your project that Xc the settings, the file references, configuration, targeted platforms, etc...
I.e. it is a critically important.
There really isn't a great answer for this. Typically, teams will avoid conflict by limiting edits to the project to one team member at a time.
The Xcode team has put a lot of effort into making the file merge-friendly. In managing several large projects via svn, I've generally found that the merges are automatic and painless.
Until they aren't. And when they aren't, revert, merge changes by hand (i.e. make the changes in the project that conflicted), and move on.
总结就是 xcode在往好的地方发展,如果通过xcode的git,那么xcode会努力处理好,merge
第二个就是,对于加入新资源,添加引用之类的事情,要限制在一个人手里..
...更有好事者,写了脚本来处理:::
#!/bin/shprojectfile=`find -d . -name 'project.pbxproj'`projectdir=`echo *.xcodeproj`projectfile=&${projectdir}/project.pbxproj&tempfile=&${projectdir}/project.pbxproj.out&savefile=&${projectdir}/project.pbxproj.mergesave&cat $projectfile | grep -v &&&&&&&& HEAD& | grep -v &=======& | grep -v &^&&&&&&& & & $tempfilecp $projectfile $savefilemv $tempfile $projectfile
#!/bin/shprojectfile=`find -d . -name 'project.pbxproj'`projectdir=`echo *.xcodeproj`projectfile=&${projectdir}/project.pbxproj&tempfile=&${projectdir}/project.pbxproj.out&savefile=&${projectdir}/project.pbxproj.mergesave&cat $projectfile | grep -v &&&&&&&& HEAD& | grep -v &=======& | grep -v &^&&&&&&& & & $tempfilecp $projectfile $savefilemv $tempfile $projectfile
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:524147次
积分:9276
积分:9276
排名:第1342名
原创:311篇
转载:551篇
译文:28篇
评论:35条

我要回帖

更多关于 git merge 冲突处理 的文章

 

随机推荐