首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Xcode中正确使用Git?

如何在Xcode中正确使用Git?
EN

Stack Overflow用户
提问于 2010-04-11 07:11:33
回答 3查看 45.2K关注 0票数 94

我做iphone开发人员已经有一段时间了,最近我在我的工作流程中加入了git。到目前为止,我已经在我的工作流程中使用了http://shanesbrain.net/2008/7/9/using-xcode-with-git上的git设置。

这些设置告诉git从合并中排除*.pbxproj?这样做有真正的原因吗?例如,当我将一个文件添加到项目中并推送到源位置时,我的开发伙伴在拉入时不会将该文件添加到他们的xcode项目中。那么,如果其中一个构建了一个发行版,那么这个文件可能不会被包括在内。难道我不应该让git处理项目文件的合并吗?为什么或者为什么不应该合并这个文件,以及当文件添加到项目中时如何正确处理这种情况?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-11 10:00:04

自从软件开发工具包发布以来,我一直致力于iPhone应用程序的开发,其中大部分时间都花在与多个开发人员组成的团队中。

事实是,禁止合并.pbxproj文件弊大于利。正如你所说,当你添加一个文件时,除非其他人获得该文件,否则他们也必须将它添加到他们的项目中-在任何大小的应用程序中,这都很糟糕,而且它还会失去源代码控制的巨大好处,因为你不能仅仅通过git就能真正恢复到一个完整的早期项目状态。

.pbxproj文件只是一个属性列表(类似于XML)。根据经验,只有当两个人同时添加文件时,你才会遇到合并冲突。在99%的合并冲突案例中,解决方案是保留合并的两端,对于git来说,这至少包括删除任何>>>>、<<<<和====行。事实上,这种情况非常常见,以至于我创建了一个简单的shell脚本来修复来自git的处于合并状态的.pbxproj文件,我在项目目录中(在类级别)运行该脚本:

代码语言:javascript
复制
#!/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

最坏的情况是如果它失败了(你请求XCode加载项目,它加载失败),你只需删除.pbxproj文件,从git中签出主文件,然后重新添加你的文件。但在使用这个脚本的几个月中,我从未遇到过这种情况,我再次与其他几个开发人员一起全职开发iPhone应用程序。

您可以尝试使用的另一个选项(在下面的注释中指出)是将此行添加到.gitattributes文件中:

代码语言:javascript
复制
*.pbxproj text -crlf -diff -merge=union

然后,git将始终对.pbxproject文件进行合并,与我提供的脚本具有相同的效果,而无需任何额外的工作。

最后,下面是我的完整.gitignore文件,显示了我将其设置为忽略的内容,因为有一些东西是您不想要的-在我的例子中,实际上只有emacs剩余部分和整个构建目录:

代码语言:javascript
复制
# xcode noise
build/*
*.pbxuser
*.mode1v3
*~

# old skool
.svn

# osx noise
.DS_Store
profile
票数 137
EN

Stack Overflow用户

发布于 2013-07-23 02:41:06

这在我的Xcode4.6和Git 1.7.5中都有效。

使用以下命令添加并提交.gitattributes文件:

代码语言:javascript
复制
*.pbxproj binary merge=union

我已经和另一个团队成员一起测试过了,效果很好。

摘自:http://robots.thoughtbot.com/post/33796217972/xcode-and-git-bridging-the-gap

票数 9
EN

Stack Overflow用户

发布于 2014-01-19 06:41:17

我确实创建了一个可以处理XCode项目文件中的合并冲突的Python脚本。

如果你想尝试一下,你可以在这里查看:https://github.com/simonwagner/mergepbx

您必须将其作为合并驱动程序安装,以便在项目文件中存在合并冲突时自动调用它( README.md将告诉您如何执行此操作)。

它应该比使用merge=union工作得更好,因为mergepbx理解您的项目文件的语义,因此将正确地解决冲突。

然而,这个项目仍然是alpha的,不要期望它能够理解所有的项目文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2615378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档