我正在开发基于Swift的XCode项目,该项目与基于Git的主存储库同步。我的团队成员之一已将几个文件添加到我已经拉过的主人。
我在项目目录中找到这些文件,但在我的项目中找不到。当我手动尝试将这些文件添加到项目中时,在这种情况下,我在项目中获得修改标记,然后我无法从主文件中提取新的更改。
这很烦人。我该如何处理这件事。
另外,作为一个团队,我们如何确保我们每个人都在不同的模块上单独工作,并确保每个人都能够提交/拉扯彼此的变化。
带有 M 标签的项目文件夹禁止我们这样做。
修改1
我也遵循了这个步骤
git rm -r --cached ProjectName.xcodeproj
git commit -m "Removed file that shouldn't be tracked"
即使这样做了,
我在File1.swift
进行了更改,我的团队成员在File2.swift
他已经提交了它,我想要提取这些更改,但是由于File1.swift
中的更改我无法拉动它。为了使其工作,我不得不放弃{{1}中的更改然后只有我能够拉动这些变化。如果是这样,那么它就会失败使用File1.swift
答案 0 :(得分:2)
Xcode项目文件
Xcode项目文件,或者更确切地说,pbxproj
容器中的xcodeproj
文件会跟踪所有文件(以及其他内容)。与Eclipse不同,Xcode不会监视源/项目文件夹的更改,因此不会更新合并后可能导致不一致的文件列表。
合并冲突
如果您的团队成员在其本地存储库副本中添加或删除文件并将其更改推送到服务器,则他基本上会覆盖pbxproj
,因此会更新Xcode项目的文件列表。如果您提取这些更改,则有两种可能的情况:
Git可以自动合并更改,这通常意味着它会保留pbxproj
文件的副本,而不会更新文件引用。
Git无法合并更改,因此表示您需要自行解决的合并冲突。根据差异和更改量,这些合并冲突可能非常令人讨厌。有时可能更容易删除pbxproj
文件的副本,使用服务器中的文件并重新应用本地更改,例如添加文件引用。
在这两种情况下,您可能需要将pbxproj
文件与服务器上的文件进行比较,然后手动合并。是的,您的项目文件将标有M
(已修改),这非常好。只需提交您的更改即可再次使用。
还有一件事:每当你想从git服务器中提取更改时,你可以隐藏你的更改(git stash
)或提交它们。
避免合并冲突
如果您希望将来避免合并冲突,我建议您查看以下工具。
的CocoaPods
Cocoapods可用于通过创建私有Pod将您的项目模块化为更小的部分。此技术的好处:您不必跟踪新添加或删除的文件。只需运行pod update
即可重新启动。有几篇博文详细描述了这种技术,例如here
phoenx
在我以前的公司,我们有一个非常庞大的代码库,在使用Cocoapods时遇到了一些麻烦。因此,我们开发了自己的元构建系统phoenx
。 Phoenx可以生成任意复杂度的Xcode项目和工作区设置。它使用元数据文件(类似Podfiles和Podspecs)来生成项目等。构建设置将存储在xcconfig文件中。目前它没有提供任何设置工具,因此您必须花一点时间手动编写xcconfig和元数据文件。我们正在研究一种更方便的方式来使用它。如果您想尝试一下,可以通过sudo gem install phoenx
进行安装。文档可在GitHub上找到。
希望有所帮助!