【发布时间】:2011-08-13 19:27:05
【问题描述】:
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 输入我的凭据。 但是,当我单击“推送”并尝试推送更改时,它会显示“无法执行操作,因为拒绝访问存储库 'origin'。”
然后会出现一个提示我输入用户名和密码的对话框,其中包含我预先填写的信息,因此它必须从本地存储库的配置中正确读取。
当我输入密码时,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
如果我重新启动 Xcode,一个 origin 存储库已添加到 Organizer 的存储库浏览器中,我可以在 GitHub 上看到主分支,因此我知道凭据是正确的,而无需我进行任何更改。
有没有人找到一种可靠的方式来使用 Xcode 4 和 GitHub,首先从本地项目开始?
如果我克隆一个包含 Xcode 项目的现有 GitHub 存储库,使用 Xcode 4 打开它,那么即使第一次推送似乎失败了,第二次推送也确实有效。所以也许从头开始用 Xcode 4 为我创建存储库并不是最好的模式(直到他们在更高版本的 Xcode 4 中改进了 Git 工具)。
编辑一个解决方法的更多细节
此示例仅适用于您添加到 GitHub 存储库的第一个项目。因此,我认为您最好执行以下步骤,请记住,此解决方案中似乎仍然存在一些 Xcode 的“陷阱”。
- 列表项
- “欢迎使用 Xcode”对话框中的“连接到存储库”。
- 使用 GitHub SSH URL 作为位置
- 为其命名 (RepositoryName) 并克隆到目录
- 第一次尝试似乎失败,即使内容已下载
- 再试一次就可以了。
- 现在“管理器”窗口中定义了一个新的存储库,其来源设置为 GitHub 远程 SSH URL。
- 在您刚刚克隆到的目录中创建一个新项目,但不要勾选“为此项目创建本地 git 存储库”选项。
- 对本地 Git 存储库进行初始提交。
- 尝试源代码控制 -> 推送和 Xcode 4 失败,并显示“无法执行操作,因为对存储库 RepositoryName 的访问被拒绝。检查用户名和密码'
- 尝试源代码控制 -> Push 和 Xcode 4 再次弹出远程存储库对话框,但这次检测到一个名为 origin 的远程存储库。旁边有一个黄色球和“需要身份验证”。
- 再次单击“推送”会导致远程推送工作。
我发现但尚未设法解决的一件事是,即使推送成功,从 GitHub 返回的带有签入哈希值的响应消息和任何消息似乎都在 Xcode 日志导航器中报告为推送失败就 GitHub 而言。
其他人有更好的解决方案吗?
【问题讨论】:
-
感谢分享您的解决方法!