Xcode 4 中的 Git 集成非常受欢迎,但在处理远程存储库时它似乎有点不稳定。
为了清楚起见,我使用 OS X 版本 10.6.7 和 Xcode 4.0.2 (4A2002a)。
如果我创建一个新的 Xcode 4 项目并接受创建本地 Git 存储库的选项,那么一切都很好。我可以在本地进行承诺,这很棒。
当我想将新项目推送到 GitHub 时,我想添加一个远程存储库并将本地更改推送到 GitHub。我可以将 GitHub 存储库添加到 Xcode 4 作为“管理器”窗口中的新存储库,但无法将其设置为现有项目的远程存储库。
所以我转而在终端中使用 git 命令。
git remote add origin https://<username>@github.com/<organization>/<repository>.git
如果我然后返回 Xcode 4 并尝试使用
文件 -> 源代码管理 -> 推送...
那么选择要将更改推送到的存储库。出现对话框,列出origin远程存储库。有一个黄色指示器表示需要身份验证,这很好,因为我还无法输入 HTTPS 的凭据。
但是,当我单击“推送”并尝试推送更改时,它显示“无法执行该操作,因为对存储库“来源”的访问被拒绝。”
然后会出现一个对话框,提示我输入用户名和密码,其中包含我预先填写的内容,因此它必须从本地存储库的配置中正确读取此信息。
当我输入密码时,Xcode 4 崩溃并出现以下错误
ASSERTION FAILURE in /SourceCache/IDEKit/IDEKit-303/Framework/Classes/SourceControl/IDESourceControlOperationInfo.m:59
Details: Message sent to invalidated object: <IDESourceControlPushOperationInfo, 0x200bd2a80>. Backtrace for invalidation:
(null)
Object: <IDESourceControlPushOperationInfo: 0x200bd2a80>
Method: -invalidate
Thread: <NSThread: 0x200020700>{name = (null), num = 1}
Hints: None
如果我重新启动 Xcodeorigin存储库已添加到管理器中的存储库浏览器中,我可以在 GitHub 上看到主分支,因此我知道凭据是正确的,而无需我更改任何内容。
有没有人找到一种可靠的方法,首先从本地项目开始,将 Xcode 4 与 GitHub 结合使用?
如果我克隆一个包含 Xcode 项目的现有 GitHub 存储库,用 Xcode 4 打开它,那么即使第一次推送似乎失败了,第二次推送也可以工作。因此,也许用 Xcode 4 从头开始为我创建存储库并不是最好的模式(直到他们在更高版本的 Xcode 4 中改进了 Git 工具)。
编辑一种解决方法的更多详细信息
此示例仅适用于您添加到 GitHub 存储库的第一个项目。因此,我认为您最好执行以下步骤,并记住此解决方案中似乎仍然存在一些 Xcode“陷阱”。
- 项目清单
- 欢迎使用 Xcode 对话框中的“连接到存储库”。
- 使用 GitHub SSH URL 作为位置
- 给它起个名字(存储库名称)并克隆到目录
- 即使内容已下载,第一次尝试似乎仍失败
- 再试一次,就可以了。
- 现在,在 Organizer 窗口中定义了一个新的存储库,其来源设置为 GitHub 远程 SSH URL。
- 在刚刚克隆到的目录中创建一个新项目,但不要勾选“为此项目创建本地 git 存储库”选项。
- 对本地 Git 存储库进行初始提交。
- 尝试源代码控制 -> 推送,Xcode 4 失败并显示“由于访问存储库而无法执行操作”存储库名称被否决。检查用户名和密码'
- 尝试源代码控制 -> 推送,Xcode 4 再次弹出远程存储库对话框,但这次检测到一个名为origin。旁边有一个黄色球和“需要身份验证”。
- 再次单击“推送”会使远程推送生效。
我发现但尚未解决的一件事是,从 GitHub 返回的响应消息以及签入哈希值和任何消息似乎都会在 Xcode 日志导航器中报告为推送失败,即使推送是成功的GitHub 很关心。
还有其他人有更好的解决方案吗?