ric*_*son 91 git xcode objective-c ios
我有一段时间以来一直是iphone开发人员,我最近在我的工作流程中加入了git.到目前为止,我已经在http://shanesbrain.net/2008/7/9/using-xcode-with-git上使用了git设置来完成我的工作流程.
那些设置告诉git从合并中排除*.pbxproj?这样做真的有原因吗?例如,当我将一个文件添加到项目并推送到源文件时,我的其他开发人员在拉出时不会将该文件添加到他们的xcode项目中.然后,如果其中一个构建版本,则可能不包含此文件.我不应该让git处理项目文件的合并吗?为什么或为什么不将此文件合并,以及如何正确处理文件添加到项目时的情况?
Ken*_*ner 133
自SDK发布以来,我一直致力于iPhone应用程序的全职工作,大部分时间都花在与多个开发人员合作的团队中.
事实是,禁止合并.pbxproj文件比使用它更有害.正如你所说,当你添加一个文件,除非其他人获得该文件,他们也必须将它添加到他们的项目 - 在任何大小的应用程序,这很糟糕,它也带来了源代码控制的巨大好处,你不能通过git真正恢复到完整的早期项目状态.
.pbxproj文件只是一个属性列表(类似于XML).根据经验,您可能获得的唯一合并冲突就是两个人同时添加了文件.99%的合并冲突案例中的解决方案是保留合并的两面,这对于git至少只需要删除任何>>>>,<<<<和====行.事实上,这是如此常见,以至于我创建了一个简单的shell脚本来从git修复合并状态的.pbxproj文件,我从项目目录(在Classes级别)运行它:
#!/bin/sh
projectfile=`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 "^>>>>>>> " > $tempfile
cp $projectfile $savefile
mv $tempfile $projectfile
Run Code Online (Sandbox Code Playgroud)
最糟糕的情况是如果它失败(你要求XCode加载项目并且无法加载),你只需删除.pbxproj文件,从git检出master,然后重新添加你的文件.但是我在这个脚本的使用数月内从未发生过这种情况,再次与其他几个开发人员一起在iPhone应用程序上全职工作.
您可以尝试使用代替脚本的另一个选项(在下面的注释中指出)是将此行添加到.gitattributes文件中:
*.pbxproj text -crlf -diff -merge=union
Run Code Online (Sandbox Code Playgroud)
然后git将始终采用.pbxproject文件的合并的两面,与我提供的脚本具有相同的效果,而无需任何额外的工作.
最后,这是我完整的.gitignore文件,显示我确实将它设置为忽略,因为有一些你不想要的东西 - 在我的情况下,实际上只是emacs残余和整个构建目录:
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~
# old skool
.svn
# osx noise
.DS_Store
profile
Run Code Online (Sandbox Code Playgroud)
这适用于Xcode 4.6和Git 1.7.5.
使用以下命令添加和提交.gitattributes文件:
*.pbxproj binary merge=union
Run Code Online (Sandbox Code Playgroud)
我和另一个团队成员一起测试了这个并且工作得很好.
取自:http: //robots.thoughtbot.com/post/33796217972/xcode-and-git-bridging-the-gap
坦率地说,现有的答案是误导性的.
如果您永远不会删除或重命名文件,那么使用merge=union策略只是直接组合不同提交中的差异,这是一个好主意.
但是,在现实世界中,我们确实需要删除或重命名文件.在没有任何修改的情况下合并差异会在这些情况下产生很多问题,而这些问题通常会导致"工作区完整性 - 无法加载项目"问题,这使您甚至无法运行项目.
到目前为止我得到的最佳解决方案:
1)很好地设计项目并在开头添加所有需要的文件,因此您很少需要更改project.pbxproj.
2)使你的功能变得微小.不要在分支中做太多事情.
3)出于任何原因,如果您需要修改文件结构并发生冲突project.pbxproj,请使用您喜欢的文本编辑器手动解决它们.当您使任务变得微不足道时,冲突可能很容易解决.
| 归档时间: |
|
| 查看次数: |
43085 次 |
| 最近记录: |