2011-07-28 36 views
2

首先,道歉,因为我是git,ssh和Xcode的新手。另外,我是一个非常恐怖的命令行。Xcode 4 git:'移动'本地git项目到我们的远程服务器

我们有一台服务器运行客户端连接ssh身份验证拉/推代码从/到。它在Xcode 4中对我使用git命令行设置的现有项目非常有用。使用Xcode 4克隆项目并推送提交非常简单。

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

SCP -r git的[email protected]:在Xcode 4 MyProject.git

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

远程:错误:拒绝以更新签出分支:裁判/头/主
远程:错误:默认情况下,更新当前分支在非纯仓库
远程:错误:被拒绝,因为它将使索引和工作树不一致
远程:错误:与您推送的内容相同,并且需要'git reset --hard'匹配
remote:error:工作树为HEAD。远程:错误:您可以将'receive.denyCurrentBranch'配置变量设置为
remote:error:'忽略'或'警告'在远程存储库中允许推入
remote:错误:其当前分支;然而,这是不建议,除非你
远程:错误:安排来更新其工作树,以匹配你在一些推
远程:错误:其他方式。
远程:错误:
远程:错误:为了压制此消息,仍然保持默认的行为,设置
远程:错误:“receive.denyCurrentBranch”配置变量为“拒绝”。 [snip]

我不知道如何正确地做到这一点,而不会丢失开发人员在其本地计算机上已经拥有的宝贵检入历史记录。

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

谢谢!

回答

9

如果您想要push回购,默认情况下它会被禁止到push到当前检出的分支。

为了避免这种情况,中央仓库(每个人都推动的仓库)通常被创建为bare仓库,即它们只包含版本信息并且没有检出工作副本。这些回购协议按照惯例命名为<repo-name>.git。您可以在git init

git init --bare myrepo.git 

创建使用--bare标志的裸回购但问题是,你复制一个本地.git文件夹my.server.com而不是创建一个裸回购那里。在.git/config,有回购是否裸露的信息。在工作副本中,bare为false,此信息现在位于服务器上。

正确的方式来解决这将是

  1. 在服务器上创建一个裸露的回购协议(如上面写的)
  2. 在你的工作副本添加此回购为remote
    git remoteadd origin [email protected]:MyProject.git
  3. 将您当地的回购内容推送到origin
    git push--force --all origin
+1

非常感谢。你钉了它。 –

相关问题