我收到“[remote denied] master branch is current check out”错误——与这篇文章中的 OP 基本上是相同的问题(Git push error '[remote denied] master -> master (branch is current check out)') ,以下是我迄今为止为修复它所做的工作,但现在我似乎可以在上述问题或新问题之间做出选择 - “缺少工作树”错误,如下所述,这是我目前陷入困境的地方。
另请注意,我的要求与其他问题不同。我不想要两个仓库,一个是裸的,一个是非裸的——只是一个仓库(源/远程),本地机器将从中提取/推送代码——它是一个实时 Web 服务器。另一篇文章没有按照这些要求指定任何要求(那里没有解决这个选项),但我的需求非常具体,因此提出了这个问题。
另请注意,有时可能会在服务器上直接编辑此目录的文件(尽管仍在使用 Git),而不是从本地工作站推送到服务器(远程),这是不可避免的。
首先,我重置了 repo,将其设置为 bare(最初在服务器上设置 Git 的开发人员只git init
在设置 repo 时使用了该命令):
git init --bare
然后,因为我所有的服务器文件都已经存在(它不是一个空目录),所以我通过这种方法(通常)做了一个初始提交:
git add .
git commit -m "initial commit"
然后我就这样编辑了.git/config
文件:
git config receive.denyCurrentBranch ignore
我当前的服务器.git/config
文件如下所示:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[receive]
denyCurrentBranch = false
我能够成功推送提交,但是如果我尝试应用这个:
git checkout -f
如上所述(大概是接受所有提交并重置 HEAD 以包含我的所有更改?),我收到以下致命错误:
fatal: This operation must be run in a work tree
我需要将工作树设置为此目录吗?如果是这样,我该怎么做?如果我这样做,结果是否仍然符合我的既定目标(同样,没有单独的裸和非裸回购 - 只是单个目录,它也服务于实时网站并位于网络根目录中) ?
还有什么我需要做的我想念的吗?
我在 stackoverflow 上广泛阅读了有关此主题的内容,包括: Git init --bare - Not Working on working tree fatal: This operation must be run in a work tree Git 中 HEAD / Working Tree / Index 之间的区别 The Pro-Git book (尤其是这里:http ://git-scm.com/book/ch2-2.html) Git-Flow(nvie):http ://nvie.com/posts/a-successful-git-branching-model/
非常感谢所有帮助和评论。谢谢!