在Xcode 4中,我如何将远程GitHub存储库添加到现有的本地项目中?

50

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而言,推送成功了。
还有其他人有更好的解决方案吗?
3个回答

89

我想我找到了使用Xcode将现有项目推送到GitHub或任何其他远程仓库的方法!

前提条件

  • 我假设你有一个由Xcode 4创建的项目,其中带有本地git存储库。
  • 您创建了一个空的远程git存储库(在以下示例中,我称其为RemoteRepository

将其推送到远程仓库

  1. 在Xcode中打开Organizer并转到Repositories选项卡

  2. 首先单击Remotes,然后单击“添加远程”

    Xcode Organizer

  3. 输入Remote Name和您的远程存储库的Location,然后单击创建

    Add a remote dialog

  4. 然后选择您的项目,打开文件->源代码控制->推送...

    open push dialog

  5. 选择您的远程存储库,并等待它可连接!查找括号中的创建

    push dialog

  6. 现在,您的旧项目已发布到GitHub

    result on GitHub

我希望它对您也有效! 在我的情况下,它适用于每个远程git存储库

如果有不清楚或使用差劲的英语,请在Twitter上与我联系!


@Luca 你的评论是一个问题吗?当然可以实现。但你必须在 GitHub 上支付私有存储库的费用! - Tim
@Johnykutty,我认为可能存在多个问题。您的存储库文件夹是否在您的网络中共享?您使用gitolite或其他工具吗?我认为还有许多其他问题。请在stackoverflow上创建一个新问题,并解释您问题的所有细节。 - Tim
@Johnykutty 只有你会德语的话才建议你去查看官方文档:http://git-scm.com/documentation。 - Tim
当我尝试推送时,出现HTTP403错误(错误:访问https://github.com/.../info/refs时返回请求的URL错误:403)。有人遇到过这个错误并克服了吗?我是xcode4.2。 - nzs
这种方法“大部分”对我有效。我不得不使用HTTPS URL而不是SSL URL作为位置。否则,就像冠军一样工作。谢谢! - picciano
显示剩余14条评论

2

我已经成功地使用ssh连接来完成这个操作(看起来像 git@github.com:<username>/<project>.git)。它会根据SSH公钥来验证用户身份,你可以在命令行上生成该公钥 -- Github的“帮助”部分有很多相关文档。


好的,我会再尝试一下SSH访问方法。就像HTTPS一样,我可以在组织者窗口中很好地添加一个ssh存储库,但似乎在与远程存储库交互的时候,它无法正确进行身份验证。谢谢你让我知道你已经成功运行了它。这给了我一些希望! - jbjon
1
我写了一篇关于如何使用SSH方法在新项目中让GitHub与XCode 4配合工作的博客。希望您能就我的发现提出您的想法,谢谢。丹。http://www.mindthe.net/devices/2011/04/28/12-steps-to-using-github-with-xcode-4/ - jbjon
我在终端成功地推送了,但是当我尝试从组织者中进行时,当检查远程操作时出现了可怕的“找不到命令”的错误,并且在尝试推送时,远程显示为“离线”。它位于我的本地网络上的Mac Os X服务器上... - Nicolas Miari

2
Xcode 6.2(可能也包括6.x)进行了更改。现在,组织者中不再有“存储库”选项卡。以下是使用新版Xcode的方法。
要将具有本地git存储库的项目添加到GitHub,请执行以下操作:
1. 转到“源代码控制”菜单,选择您的项目并选择“配置”: 2. 您会看到:
3. 选择“远程”选项卡,并按左下角的“+”号。选择“添加远程”。
4. 输入远程存储库的名称,并输入其URL。确保已经创建了此远程存储库,并且如果在GitHub上,则指定这是一个现有项目而不是新项目。
5. 完成几乎了。转到“源代码控制”菜单并选择“推送”。然后,您将看到在上一步中使用的存储库的名称,例如“simplest / master”;按“推送”按钮即可。
完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接