嘿,我是git的新手,但我了解基础知识,但我对使用SSH从客户端计算机推送服务器感到困惑。 (我们正在使用私人服务器)
这是&#39>发生了什么: 我克隆了服务器上的repo。我更改了一个文件,添加并提交它然后执行git push origin master。
但是我收到了一些不允许我推送的错误,因为回购已经签出了'在服务器上。 我在这里读到了这个问题:Git push error '[remote rejected] master -> master (branch is currently checked out)' 但我真的不明白答案。有些人建议更改配置receive.denyCurrentBranch设置,但这只会使错误MESSAGE消失;它实际上并没有让推动通过。
实际工作的另一个建议是切换服务器所在的分支。
因此,如果用户正在使用主分支;在服务器上,我可以切换到临时分支,用户可以将更改推送到主分支。然而,问题是如果服务器在其临时分支上,并且新用户需要克隆存储库,他们将最终克隆临时分支,然后再次无法推送更改(因为他们会推动“签出”临时分支。)
对不起,我想我的问题归结为:将更改推送到服务器的正确方法是什么,或者开发团队如何处理推送到服务器的问题? 谢谢你的帮助。
答案 0 :(得分:0)
如果我理解正确,那么您在每个人都克隆的服务器上使用中央主存储库。但是,您的中央存储库似乎被配置为具有工作副本的私有存储库。
中央存储库应设置为裸存储库,没有工作副本,如链接问题的最佳答案中所述。如果您的服务器有任何需要工作副本的构建自动化系统等,则应使用从裸中心克隆的单独工作存储库。
裸Git存储库仅包含版本化内容,并且没有签出任何内容,即没有直接在那里完成开发工作。新内容始终push
到裸存储库。开发是在具有工作副本的私有存储库中完成的,其中来自其他开发人员或来自中央存储库的新内容通常是pull
。考虑一下:如果您的同事将新版本推送到您的工作中,您的工作会发生什么?私人工作存储库和Git在你正在进行的分支上默默地接受了这个?