首先,道歉,因为我是git,ssh和Xcode的新手.而且,我是一个相当命令行的恐惧症.
我们有一台服务器正在运行,客户端使用ssh身份验证pull/push代码连接到/.对于我使用git命令行设置的现有项目,它在Xcode 4中运行得非常好.使用Xcode 4和推送提交从那里克隆项目非常简单.
我感到困惑的是如何将我们的服务器设置为开发人员使用Xcode 4创建的本地git项目的原点/主服务器(具有大量的签入历史记录).我看到有一个隐藏的.git文件夹,所以我试过:
scp -r .git git@my.server.com:MyProject.git
然后从Xcode 4开始,我可以完全从我们的服务器中克隆它.我可以看到完整的签到历史.如果我尝试推送更改,我收到一个巨大的错误消息.
remote:错误:拒绝更新签出分支:refs/heads/master
remote:错误:默认情况下,更新非裸存储库中的当前分支
:错误:被拒绝,因为它会使索引和工作树不一致
remote:错误:你推了什么,并且需要'git reset --hard'来匹配
remote:错误:工作树到HEAD.
remote:错误:您可以将'receive.denyCurrentBranch'配置变量设置为
remote:错误:远程存储库中的'ignore'或'warn'允许推送到
remote:error:当前分支; 但是,除非你是
远程的,否则不建议这样做:错误:安排更新其工作树以匹配你在某个
远程推送的内容:错误:其他方式.
remote:error:
remote:error:要压制此消息并仍然保持默认行为,请将
remote:error:'receive.denyCurrentBranch'配置变量设置为'拒绝'.[剪断]
我不知道如何正确地做到这一点而不会失去开发人员已经拥有的本地机器上的宝贵签到历史.
有人能指出我缺少的基本步骤或概念吗?
谢谢!
如果你想要push一个仓库,默认情况下它被禁止到push当前签出的分支.
为了避免这种情况,中央回购(每个人都推送的那些)通常被创建为barerepos,即它们仅包含版本信息而没有检出的工作副本.这些回购按惯例命名<repo-name>.git.您可以使用--bare标志创建一个裸仓库git init
git init --bare myrepo.git
Run Code Online (Sandbox Code Playgroud)
但问题是你复制了一个本地.git文件夹my.server.com而不是在那里创建一个裸仓库.在.git/config,有关于回购是否裸露的信息.在工作副本中,如果bare为false,则此信息现在位于服务器上.
解决这个问题的正确方法是
remote在工作副本中添加此repo作为agit remote add origin git@my.server.com:MyProject.git origingit push --force --all origin