19

我可以为我自己的项目创建一个 repo 并使用 GitHub / BitBucket。在与其他开发人员合作或尝试在 GitHub 上创建项目时,我遇到了问题。

我知道其他答案,例如开源项目上 git 存储库的最佳实践,但是我想知道如何解决 OSX / Xcode 特定的问题。

  1. .DS_Store文件可能很痛苦。您可以使用.gitignore来阻止,但如果它们已经被包含,或者其他开发人员通过笨拙的 git 命令将它们添加回来,会发生什么?

  2. .xcodeproj将更改其他人的目录名称和开发人员配置文件。进行合并或避免冲突的最佳方法是什么?

  3. 如果我从 github 项目中分叉或拉取,我该如何清理这些问题并最大限度地减少维护者的合并冲突?

如果人们有一个为 Xcode 创建的示例.gitignore,或者他们用来初始化他们的 repos 的脚本,那就太好了!

4

6 回答 6

15
  1. 放入。.DS_Store_ .gitignore然后,如果您还没有,请添加.gitignore到 repo。(你不应该忽略.gitignore。)现在所有的开发者都会忽略.DS_Store文件。如果在您放入之前错误地将任何内容添加到 repo.DS_Store.gitignore,您现在可以删除它们(在提交中)并且它们应该保留在外面。

  2. xcodeproj一个目录。此目录中唯一必须在存储库中的文件就是该project.pbxproj文件。我通常通过将这些行放在我的.gitignore

    *.xcuserstate
    project.xcworkspace/
    xcuserdata/
    

    您应该避免在构建设置中放置绝对路径。使用相对路径。

    您的调试和发布版本应该iPhone Developer用作代码签名身份,以便 Xcode 自动选择本地开发人员的配置文件。当您想要创建 IPA(用于分发)时,Xcode 将提供使用不同的身份对其重新签名,此时您可以根据需要选择您的分发配置文件。

  3. 如果您尝试使用 github 中出现这些错误的项目,您可以尝试让维护者修复它们,或者您可以确保您不会.DS_Store在相同的提交中触及文件和代码签名身份你想向上游发送。

于 2012-10-16T20:52:57.287 回答
5

关于 .xcodeproj 和合并冲突的第二个问题。

使用一个.gitattributes文件来指定所有.pbxproj文件的合并冲突应该使用该merge=union策略来处理,这应该意味着 Git 知道合并来自冲突双方的更改,首先获取上游的更改。

这篇文章更深入地解释了它

于 2013-09-18T14:30:54.270 回答
4

我会一一尝试:

I.git filter-branch仅当您需要从历史记录中完全删除文件时才需要使用。如果这些文件不包含任何信用卡信息,那么我认为以下内容就足够了:

git rm --cached .DS_Store
git commit -m "{Your message}" 

然后将此文件添加到.gitignore并提交。

这将提交从存储库中删除文件,但会将文件保留在工作目录中。如果你推送它然后其他人会拉这个提交,他们可能会删除他们的文件,所以你必须传达这一点。通过提交.gitignore,您将阻止其他开发人员再次添加此文件。如果您不是维护者,那么我认为您不应该做任何事情,而是将此问题解决给维护者。

二、我坚信任何性质的隐藏文件大多数时候都不应该因为这个原因被放入存储库中。因此,我认为您应该对.xcodeproj.DS_Store做同样的事情,并将其放入.gitignore并提交。.gitignore是上述规则的例外。

三、如果这些文件被正确忽略,那么它们将来不会有任何问题。如果他们已经在 repo 中并且有人想要进行此类清理,则应该由维护人员完成并在团队内部进行沟通。

希望有帮助!

于 2012-10-16T20:33:39.463 回答
4

git filter-branch 可能会帮助您从存储库中删除不需要的文件(.DS_Store 文件) - 参见例如https://help.github.com/articles/remove-sensitive-data

如果笨拙的 git 提交添加了文件,您应该能够将更正的变更集重播到干净的存储库中。

于 2012-10-10T12:08:30.383 回答
2

从某种意义上说,如果 .DS_Store 已经添加,则 .gitignore 不会有太大帮助,但我认为这对您和其他人来说仍然是一个很好的资源。

当我开始一个项目时,我通常会查看这个列表,看看是否有一个好的 .gitignore 已经存在。更具体地说,这个是 Objective-C .gitignore。

希望这些资源有一些用处。

于 2012-10-15T03:44:55.063 回答
1

作为 Mac 用户,您应该下载支持Git Flow的SourceTree等工具。Git Flow 将帮助您围绕协作者如何将代码提交到 repo 建立一些最佳实践,并至少降低合并冲突的频率和更易于管理。对于各种项目类型的一组 gitignore 文件,您可以访问GitHub并下载一个准备就绪的文件。对于 Xcode,他们将其列为Objective-C.gitignore。这是一个很好的起点,它甚至涵盖了Cocoapods。如果您使用外部库,您的项目应该使用 CocoaPods,以便您可以隔离该代码并将其保留在您的存储库之外并避免使用 git 子模块。

现在,当您发现一个文件已像 .DS_Store 一样进入您的存储库时,只需将其删除,然后继续。确保将其添加到已签入项目的 .gitignore 文件中。

至于 xcodeproj ......由于上述 gitignore 将其过滤掉,因此在用户特定的文件中不应该有太多的自定义。如果要共享方案,请确保您选中管理方案下的共享,并且您将签入该子目录中的文件。您应该使用自动选择证书,因此唯一真正的选择是开发人员或分发。您还应该利用Xcode中提供的变量来避免硬编码完整路径。当试图想到一个 Plists 示例时,在这种情况下,您可能已经编写了/Users/me/MyProject/Resources/MyProject.plist,但应该使用$(SRCROOT)/resources/MyProject.plist.

于 2012-10-21T19:54:03.667 回答