ios - 如何在 Xcode 中正确使用 Git?

标签 ios objective-c xcode git

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

这些设置告诉 git 从 merge 中排除 *.pbxproj?这样做有真正的理由吗?例如,当我将文件添加到项目并推送到源时,我的开发人员在 pull 时不会将该文件添加到他们的 xcode 项目中。然后,如果他们中的一个人构建了一个版本,这个文件可能不包括在内。我不应该让 git 处理项目文件的 merge 吗?为什么或为什么不应该 merge 此文件以及如何正确处理将文件添加到项目中的情况?

最佳答案

自 SDK 发布以来,我一直在全职开发 iPhone 应用程序,其中大部分时间都花在与多个开发人员的团队中。

事实是,禁止 merge 该 .pbxproj 文件比它有用的方式更有害。正如您所说,当您添加文件时,除非其他人获得该文件,否则他们还必须将其添加到他们的项目中 - 在任何大小的应用程序中,这很糟糕,而且它还带走了源代码控制的巨大好处,因为您仅通过 git 并不能真正恢复到完整的早期项目状态。

.pbxproj 文件只是一个属性列表(类似于 XML)。根据经验,您遇到的唯一 merge 冲突是两个人同时添加文件。 99% 的 merge 冲突情况的解决方案是保留 merge 的双方,这对于 git 至少简单地涉及删除任何 >>>>、<<<< 和 ==== 行。事实上,这很常见,以至于我创建了一个简单的 shell 脚本来从 git 修复处于 merge 状态的 .pbxproj 文件,我从项目目录中运行它(在类级别):

#!/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 checkout 主文件,然后重新添加你的文件。但在使用这个脚本的几个月里,我从来没有遇到过这种情况,我再次与其他几位开发人员一起全职开发 iPhone 应用程序。

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

*.pbxproj text -crlf -diff -merge=union

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

最后,这是我完整的 .gitignore 文件,显示了我将它设置为忽略的内容,因为有一些你不想要的东西 - 在我的情况下,实际上只是 emacs 残余和整个构建目录:

# xcode noise
build/*
*.pbxuser
*.mode1v3
*~

# old skool
.svn

# osx noise
.DS_Store
profile

关于ios - 如何在 Xcode 中正确使用 Git?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2615378/

相关文章:

ios - 页面 View Controller : Determining "next" and "previous" when using Core Data

ios - 在 ios 中的 wkwebview 中捕获重定向 url

Xcode 11 无可用设备条件

ios - 为什么我的 UITableViewCell 不取消选择并更新它的文本?

ios - 当应用程序处于后台时,如何在iOS应用程序中获得Web服务响应?

jquery - 旋转设备方向时,JSSOR slider 无法在 iOS 中正确调整大小

ios - UIAlertController 根本没有出现

ios - 在 : _NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 7 等文本字段中输入文本时出错

iphone - 调用 UILocalNotification 时触发警报

objective-c - 查找AppDelegate.m文件