git remote拒绝-本地存储库

问题描述

如果我的directory1包含文件的选择并且在git的控制下,则我运行..

git clone -l $HOME/directory1 directory2

我现在在我的cwd中有一个directory1的副本。

如果我然后在directory2中编辑文件,将其添加到暂存并提交,则在收到错误消息后无法将其推送到directory1。

remote: error: refusing to update checked out branch: refs/heads/master

我不明白这一点,因为远程分支(目录1)是最新的,并且在将其克隆到目录2和尝试将其推回到目录1之间,我没有进行更改。

编辑:如果我在directory2内运行git status,则会显示“您的分支在1次提交之前领先于原始服务器/主服务器”。

我还是不明白。

解决方法

您看到的错误是因为directory1中的存储库包含一个工作副本,其中master是当前已签出的分支。

此时,您有两种选择:

  1. directory1中的存储库转换为bare repository(即没有工作副本的存储库)
  2. 通过将receive.denyCurrentBranch选项设置为directory1directory2推送时,告诉Git更新updateInstead中的工作副本:
    cd directory1
    git config receive.denyCurrentBranch updateInstead
    

您可以在documentation中了解有关此选项的更多信息:

如果设置为truerefuse,则git-receive-pack将拒绝对非裸存储库的当前签出分支的引用更新。这样的推送具有潜在的危险,因为它会使HEAD与索引和工作树不同步。

refuse是默认值,因此当您按下时会出错。关于updateInstead值:

另一个选项是updateInstead,如果压入当前分支,它将更新工作树。

如果您的目标是使directory1directory2保持同步,那么我认为这是更可取的选择。但是,请记住:

默认情况下,如果工作树或索引与HEAD有任何不同,updateInstead将拒绝推送。

这意味着,如果您对directory1进行了未提交的更改,则从directory2进行的推送将失败,因为它将覆盖索引和工作副本中的所有内容。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...