Xcode 4的Git集成功能很受欢迎,但在处理远程代码库时似乎有些不稳定。为了明确起见,我使用的是OS X 10.6.7版本和Xcode 4.0.2(4A2002a)。
如果我创建一个新的Xcode 4项目并接受选项来创建本地Git仓库,则一切都很好。我可以提交本地更改,这很棒。
当我想将新项目推送到GitHub时,我想要添加一个远程代码库,并将我的本地更改推送到GitHub。我可以在组织器窗口中将GitHub仓库添加为新仓库,但不存在将其设置为现有项目的远程代码库的方法。
因此,我转而在终端中使用git命令。
git remote add origin https://<username>@github.com/<organization>/<repository>.git
如果我回到Xcode 4并尝试使用
文件 -> 源代码管理 -> 推送...
然后会出现选择要推送更改的存储库对话框,其中列出了origin远程存储库。有一个黄色指示灯显示需要进行身份验证,这很好,因为我还没有能够为HTTPS输入我的凭据。 但是,当我单击“Push”并尝试推送更改时,它会显示“无法执行操作,因为拒绝访问存储库'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存储库将添加到组织者中的存储库浏览器中,我可以在GitHub上看到主分支,因此我知道凭据是正确的,而无需更改任何内容。有没有人发现了一种可靠的方法,使用Xcode 4与GitHub开始本地项目?
如果我克隆一个已经存在Xcode项目的GitHub存储库,并在Xcode 4中打开它,即使第一个Push似乎失败了,第二个Push确实有效。因此,也许从Xcode 4的绝对基础开始为我创建存储库不是最佳模式(直到他们在以后的Xcode 4版本中改进Git工具)。
带有一个解决方法的进一步细节
这个例子只适用于您要添加到GitHub存储库的第一个项目。因此,我认为您最好考虑以下步骤,注意,在此解决方案中仍然存在一些Xcode“陷阱”。
1.从欢迎Xcode对话框中的“连接到存储库”。 2.使用GitHub SSH URL作为位置 3.给它一个名称(RepositoryName)并克隆到一个目录。 4.第一次尝试似乎失败了,即使已下载了内容。 5.再试一次,它就可以了。 6.现在,在组织者窗口中定义了一个新的存储库,其原点设置为GitHub远程SSH URL。 7.在您刚才克隆到的目录中创建一个新项目,但不要选中“为此项目创建本地git存储库”选项。 8.对本地Git存储库进行初始提交。 9.尝试源控件->推送,Xcode 4失败,显示“无法执行操作,因为拒绝访问存储库RepositoryName。检查用户名和密码”。 10.尝试源控件->推送,Xcode 4再次弹出远程存储库对话框,但这次检测到了名为origin的远程存储库。它旁边有一个黄色球和“需要身份验证”。 11.再次点击“推送”会导致远程推送工作。
我注意到的一件事,但还没有设法解决的是,来自GitHub的响应消息与签入哈希值和任何消息似乎在Xcode日志导航器中报告为Push失败,即使就GitHub而言,推送成功了。
还有其他人有更好的解决方案吗?