project.pbxproj 始终在 git 中标记为已修改
Posted
技术标签:
【中文标题】project.pbxproj 始终在 git 中标记为已修改【英文标题】:project.pbxproj is always tagged as modified in git 【发布时间】:2020-01-06 14:05:06 【问题描述】:我在使用 xcode 时遇到了一些问题,链接库消失等问题。
经过一番研究,似乎我的 project.pbxproj 文件在两次提交之间已完全更改,我正在尝试恢复旧版本。但是,现在已经有一段时间了,我的 project.pbxproj 总是被 git 标记为已修改。我一直认为是 XCode 在修改 GUI 中的某些内容的同时修改了文件。但是,由于此文件的更改,git 第一次阻止我合并或恢复。我无法 gitignore 它,因为它包含构建我的项目所需的重要信息。
但它变得更奇怪了,因为文件确实总是处于修改状态。我只是尝试在完全没有打开应用程序、没有 IDE、没有 xcode 的情况下启动我的 mac,只打开一个终端,将我的项目克隆到一个新创建的文件夹中。克隆后,如果我只是 cd 进入文件夹并 git status,该文件将被标记为已修改。
这种行为正常吗?人们是否遇到过这个文件和 git 的问题?我可以将我的 project.pbxproj 恢复到旧状态吗?这样做安全吗?有没有一些 git 配置可以用来更好地处理这个文件?
我的项目不是原生的,我使用的是 react-native 框架
【问题讨论】:
你有正确的 .gitattributes 吗? (***.com/q/1549578/6309) 内容是 *.pbxproj -text 我想我已经接近解决方案了,我认为它与 git 相关。等我确定了,我会更新的。谢谢! 【参考方案1】:文件project.pbxproj
不断变化,因为它包含有关项目结构和配置、链接框架等的信息。
我发现在我的.gitattributes
中添加*.pbxproj binary merge=union
修复了该文件中 95% 的合并问题,总是有一种罕见的情况是联合失败并且您最终得到错误的右括号,但通常很容易手动查找并修复它。
【讨论】:
【参考方案2】:我已经了解我的问题是什么,我将在此处公开它,然后将其留待审核以查看它是否相关,因为这种情况可能会发生在其他人身上。
几个月前,我在 Xcode 上更改了我的包名,删除了一些大写字母,作为我理解包名不应包含大写字母的应用。名称从 com.mycompany.MyApp 变为 com.mycompany.myapp。结果,XCode 删除了 MyApp.xcodeproj 文件夹并创建了一个 myapp.xcodeproj 文件夹(我认为它是自动化的,但不能确定,因为这发生在几个月前)。
在这方面一切顺利,除了 git 跟踪存储库中的两个文件夹。每当我克隆我的存储库时,我都会得到一个 myapp.xcodeproj 文件夹,但 git 仍然会认为存储库中同时存在 myapp.xcodeproj 和 MyApp.xcodeproj。
这导致 git 比较本地和远程的不同文件,因此系统地将此文件视为已修改,即使它刚刚提交,甚至推送。 Git 总是将文件的当前版本与 2 个月前的文件进行比较。行为不稳定,因为 myapp 文件夹总是被标记为已修改,而实际修改它也会将 MyApp 文件夹标记为已修改。
希望有一天这对某人有所帮助。
我会回答我自己的问题:
这种行为正常吗? 绝对不会
人们是否遇到过这个文件和 git 的问题? 是的,人工合并这个文件很困难,我不推荐它。为避免这样做,Javier Rivarola 的回答以及 this question 可能会对您有所帮助
我可以将我的 project.pbxproj 恢复到旧状态吗?这样做是否安全? 您将丢失之后所做的配置,但文件仍然有效
是否有一些 git 配置可以用来更好地处理这个文件? 见第二个问题
【讨论】:
以上是关于project.pbxproj 始终在 git 中标记为已修改的主要内容,如果未能解决你的问题,请参考以下文章
如何在升级本机时解决`project.pbxproj`文件中的冲突?
我应该忽略 xcodeproject/project.pbxproj 文件吗?
聊聊 Xcode 项目文件中的 project.pbxproj
Runner.xcodeproj/project.pbxproj 中硬编码的 FLUTTER_ROOT