git noob努力将开发机器更改推送到远程生产服务器

时间:2011-05-22 16:35:09

标签: git

我是git的新手。在可预见的未来,我将是该项目的唯一开发人员,所以我不担心在这一点上成为一名git专家。我只想将我的更改推送到生产服务器。

开发机器有雪豹操作系统。我安装了git。使用git init,添加和提交。

远程生产服务器有ubuntu 10.我安装了git并使用了git init。

然后“ssh://me@domain.com:00000 / path_to_project_root / .git master:master”

收到以下错误:

“拒绝更新签出的分支:refs / heads / master。默认情况下,更新非裸存储库中的当前分支被拒绝,因为它会使索引和工作树与您推送的内容不一致,并且要求'git reset --hard'将工作树与HEAD匹配。您可以在远程存储库中设置'receive.denyCurrentBranch'配置变量t'ignle'或'warn'以允许推送其当前分支;但是,这是除非你安排更新其工作树以匹配你以其他方式推送的内容,否则不推荐。要压制此消息并仍然保持默认行为,请将'receive.denyCurrentBranch'配置变量设置为'拒绝'... [远程拒绝] master - > master(当前已检出分支)“

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在Stack Overflow上非常频繁地询问此错误,如果您了解所使用的术语,则会在错误消息中描述您需要知道的所有内容。在您对问题的评论中,我已经将其他几个问题与处理相同错误的问题联系起来,但无论如何我都会在这里添加一个快速摘要。

基本上git中有两种类型的存储库 - 裸存储库和非裸存储库。当您需要处理代码时,您几乎总是使用非裸存储库,它位于顶层:

  • 一个.git目录(包含项目的所有历史记录)
  • 该顶级目录中的所有其他内容,通常是您正在处理的所有源代码

后者是“工作树”。

裸存储库就像它自己的.git目录一样。这意味着,例如,裸存储库永远不会有本地更改,并且您不能在可能产生冲突的存储库中进行任何合并。

如果您尝试推送到当前在非裸存储库中检出的分支,git就会出现问题。如果它没有触及工作树,但更新了分支,git status的结果将突然看起来很混乱 - 在分支的新提交中添加的任何文件都将显示为deleted git status和您的本地更改以及新提交引入的更改将全部混淆。如果git只更新您的工作树,它可能会覆盖您在那里的本地更改。

通常建议您只推送到裸存储库。但是,有各种各样的方法 - 例如,git FAQ中的以下答案表明了一对:

在这种情况下,由于您希望推送到此存储库以部署代码,因此您可以尝试使用the hook linked to there,这使得推入非裸存储库比仅使用抛出本地更改的挂钩更安全git reset --hard或类似的。