我是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(当前已检出分支)“
感谢任何帮助。
答案 0 :(得分:2)
在Stack Overflow上非常频繁地询问此错误,如果您了解所使用的术语,则会在错误消息中描述您需要知道的所有内容。在您对问题的评论中,我已经将其他几个问题与处理相同错误的问题联系起来,但无论如何我都会在这里添加一个快速摘要。
基本上git中有两种类型的存储库 - 裸存储库和非裸存储库。当您需要处理代码时,您几乎总是使用非裸存储库,它位于顶层:
.git
目录(包含项目的所有历史记录)后者是“工作树”。
裸存储库就像它自己的.git
目录一样。这意味着,例如,裸存储库永远不会有本地更改,并且您不能在可能产生冲突的存储库中进行任何合并。
如果您尝试推送到当前在非裸存储库中检出的分支,git就会出现问题。如果它没有触及工作树,但更新了分支,git status
的结果将突然看起来很混乱 - 在分支的新提交中添加的任何文件都将显示为deleted
git status
和您的本地更改以及新提交引入的更改将全部混淆。如果git只更新您的工作树,它可能会覆盖您在那里的本地更改。
通常建议您只推送到裸存储库。但是,有各种各样的方法 - 例如,git FAQ中的以下答案表明了一对:
在这种情况下,由于您希望推送到此存储库以部署代码,因此您可以尝试使用the hook linked to there,这使得推入非裸存储库比仅使用抛出本地更改的挂钩更安全git reset --hard
或类似的。