git - Xcode 4混帐: 'moving' local git project to our remote server

标签 git xcode4 ssh

首先,抱歉,我是 git、ssh 和 Xcode 的新手。另外,我相当讨厌命令行。

我们有一个运行的服务器,客户端通过 ssh 身份验证从/向其中 pull/推送代码进行连接。对于我使用 git 命令行设置的现有项目,它可以从 Xcode 4 完美运行。使用 Xcode 4 从那里克隆项目并推送提交非常简单。

我感到困惑的是如何将我们的服务器设置为开发人员使用 Xcode 4(具有大量 checkin 历史记录)创建的本地 git 项目的源/主机。我看到有一个 stash 的 .git 文件夹,所以我尝试了:

scp -r .git git@my.server.com:MyProject.git

然后从 Xcode 4 开始,我可以继续从我们的服务器完美地克隆它。我可以看到完整的 checkin 历史记录。但是,如果我尝试推送更改,则会收到一条巨大的错误消息。

远程:错误:拒绝更新 checkout 分支:refs/heads/master
远程:错误:默认情况下,更新非裸存储库中的当前分支
remote: error: is denied,因为它会使索引和工作树不一致
远程:错误:与您推送的内容一致,需要“git reset --hard”才能匹配
远程:错误:工作树到 HEAD。
远程:错误:您可以将“receive.denyCurrentBranch”配置变量设置为
远程:错误:远程存储库中的“忽略”或“警告”以允许推送到
远程:错误:其当前分支;但是,不推荐这样做,除非你
远程:错误:安排更新其工作树以匹配您推送的内容
远程:错误:其他方式。
远程:错误:
远程:错误:要压制此消息并仍保持默认行为,请设置
远程:错误:“receive.denyCurrentBranch”配置变量为“拒绝”。 [剪]

我不知道如何在不丢失开发人员在其本地计算机上已有的宝贵 checkin 历史记录的情况下正确执行此操作。

有人能指出我遗漏的基本步骤或概念吗?

谢谢!

最佳答案

如果你想push对于 repo 协议(protocol),默认情况下禁止使用 push到当前 checkout 的分支。

为了避免这种情况,中央仓库(每个人都推送的仓库)通常创建为 bare repo 协议(protocol),即它们只包含版本控制信息,没有 checkout 的工作副本。这些 repo 协议(protocol)按照惯例命名为 <repo-name>.git .您可以使用 --bare 创建一个裸仓库在 git init 上标记

git init --bare myrepo.git

但问题是你复制了一个本地.git文件夹到 my.server.com而不是在那里创建一个裸仓库。在 .git/config ,有 repo 是否裸露的信息。在工作副本中,bare是假的,这个信息现在在服务器上。

解决这个问题的正确方法是

  1. 在服务器上创建一个裸仓库(如上所写)
  2. 将此存储库添加为 remote在你的工作副本中
    git remote add origin git@my.server.com:MyProject.git
  3. 将你本地仓库的内容推送到origin
    git push --force --all origin

关于git - Xcode 4混帐: 'moving' local git project to our remote server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865427/

相关文章:

Web 应用程序的 Facebook 诈骗错误

git - 备份git有没有并发问题?

iphone - 如何在不复制 Xcode 4 项目的情况下从付费版本构建免费版本?

linux - 将 ssh 脚本执行时间戳记录到服务器上的文件中

iOS - SimpleFTP 如何使用 SFTP (ssh)?

postgresql - 使用 pgadmin3 连接到远程主机上 docker 容器中的数据库

git - 获取 Git 服务器版本

Git commit --amend merge 两个提交

objective-c - XCode 4 for iOS 中的绑定(bind)

xcode - Xcode 4 的 Command-shift-D 等价物?