【问题标题】:Source control in XCode is a nightmare - can anyone offer advice?XCode 中的源代码控制是一场噩梦 - 任何人都可以提供建议吗?
【发布时间】:2012-03-25 19:01:06
【问题描述】:

在 Xcode (4.3) 中使用 Git 是一场真正的噩梦。

这是一个场景......

我想添加一个新功能,所以我创建了一个新的主题分支。

我添加了我的新功能,并准备好提交、变基和合并...

我提交我的更改 - 很好。

我跳回 master 以提取更改(以防其他人更新了代码)。 突然我明白了:

error: Your local changes to the following files would be overwritten by checkout:
myProject/project.xcworkspace/xcuserdata/Bodacious.xcuserdatad/UserInterfaceState.xcuserstate

嗯?我刚刚答应了。

Xcode 喜欢每隔一秒更改我的 project.xcworkspace 文件,这使得几乎不可能进行干净的原子提交。

更重要的是,如果我确实提交了 project.xcworkspace 中的更改并快速跳回另一个分支(例如为了合并到 Master),那么 Xcode 会抱怨文件已更改并且可能也会崩溃。

据我所知,I can't add these files to my .gitignore 也是。

我是否必须接受 Xcode 无法实现简洁有序的 git 策略,在进行任何 Git 管理之前关闭 Xcode,或者是否有其他选项可用?

【问题讨论】:

    标签: ios git version-control xcode4


    【解决方案1】:

    我只是将这些文件添加到我的.gitignore 文件中。无需与其他开发者共享。

    所以我有:

    *.xcworkspace
    

    在 .gitignore 中

    请注意,您链接到的 stackoverflow 问题说不排除 project.pbxproj,但没有说不排除 *.xcworkspace

    但是,我目前没有使用工作区功能。如果您确实使用了工作区功能,您可能希望包含这些文件,但忽略 xcuserdata 文件。

    【讨论】:

    • @VanDuTran 您可以专门将 *.xcscheme 放入您的 .gitignore 文件中,但最好将 xcuserdata 放入 .gitignore 文件中以忽略所有用户特定的数据。
    【解决方案2】:

    您链接的问题仅涉及xcodeproject/project.pbxproj 文件。您应该可以安全地.gitignore 其他文件。

    【讨论】:

      【解决方案3】:

      如果您因为UserInterfaceState.xcuserstate 已被修改而无法推送您的提交,这里有一个快速修复:

      1. 打开 Organizer,转到 Repositories,复制提交的代码(类似于 f01a2147218d by username
      2. 打开终端,进入你的项目文件夹,git reset --hard f01a2147218d
      3. 推送提交!

      【讨论】:

        【解决方案4】:

        这就是在 Xcode 5.1 上对我有用的方法:

        1. 提交并推送您所在分支的更改。
        2. 转到 Xcode > 源代码管理 > 放弃所有更改(应该只放弃工作区问题)
        3. 签出您想要的分支并合并或任何您想要做的事情。

        注意:如果您在签出新分支之前等待太久或在 Xcode 中执行任何操作,您可能不得不再次丢弃更改

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-29
          • 1970-01-01
          相关资源
          最近更新 更多