>主人(分支目前被检出)'
昨天,我发布了一个关于如何将Git仓库从我的一台机器克隆到另一台机器的问题,我如何从另一台机器'git clone'?
我现在能够成功地从我的源(192.168.1.2)克隆一个Git仓库到我的目的地(192.168.1.1)。
但是当我做了一个文件编辑,一个git commit -a -m "test"
和一个git push
,我在我的目的地(192.168.1.1)上得到这个错误:
git push
hap@192.168.1.2's password:
Counting objects: 21, done.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1010 bytes, done.
Total 11 (delta 9), reused 0 (delta 0)
error: refusing to update checked out branch: refs/heads/master
error: By default, updating the current branch in a non-bare repository
error: is denied, because it will make the index and work tree inconsistent
error: with what you pushed, and will require 'git reset --hard' to match
error: the work tree to HEAD.
error:
error: You can set 'receive.denyCurrentBranch' configuration variable to
error: 'ignore' or 'warn' in the remote repository to allow pushing into
error: its current branch; however, this is not recommended unless you
error: arranged to update its work tree to match what you pushed in some
error: other way.
error:
error: To squelch this message and still keep the default behaviour, set
error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git+ssh://hap@192.168.1.2/media/LINUXDATA/working
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git+ssh://hap@192.168.1.2/media/LINUXDATA/working'
我使用两个不同版本的Git(远程版本为1.7,本地版本为1.5)。 这是一个可能的原因吗?
您可以简单地将远程存储库转换为裸存储库(裸存储库中没有工作副本 - 该文件夹仅包含实际存储库数据)。
在远程存储库文件夹中执行以下命令:
git config --bool core.bare true
然后删除该文件夹中除.git
之外的所有文件。 然后,您将能够无任何错误地执行git push
到远程存储库。
我刚开始学习Git时遇到了同样的错误。 其他一些答案显然不适用于Git的新手!
(我将使用非技术性术语来说明问题。)无论如何,发生的事情是您有两个存储库,一个是您最初制作的原创作品,另一个是您刚制作的作品。
现在你在工作仓库中,正在使用“主”分支。 但是你也碰巧在原始仓库中“登录”到同一个“主”分支。 现在,由于您在原始版本中“登录”,Git担心您可能会陷入困境,因为您可能正在处理原创内容并将其搞砸。 因此,您需要返回到原始存储库并执行“git checkout someotherbranch”,现在您可以毫无问题地推送。
我希望这有帮助。
错误消息描述发生了什么。 如果该分支被签出,更多现代版本的Git拒绝通过推送更新分支。
在两个非裸存储库之间工作的最简单方法是或者
总是通过拉(或取和合并)更新存储库,或者,如果必须的话,
通过推送到一个单独的分支(一个导入分支),然后将该分支合并到远程机器上的主分支中。
这个限制的原因是push操作只在远程Git仓库上运行,它没有权限访问索引和工作树。 因此,如果允许,对检出分支的推送将会将 HEAD
更改为 与远程存储库上的索引和工作树不一致。
这会使得意外提交一个改变来解除所有推送的更改变得非常容易,而且还很难区分未提交的任何本地更改和新HEAD
,索引和工作树之间的差异推动移动HEAD
造成的。
上一篇: > master (branch is currently checked out)'
下一篇: ruby on rails