无法推入Git

时间:2014-08-22 13:19:11

标签: git push

在最后提出我自己的问题之前,我经历了其他类似的问题。

我开始学习Git,我尝试了一些非常简单的事情。我的目标是在我的本地机器上创建一个repo,将其克隆到我本地机器的一个文件夹中。对克隆中的文件进行更改。将更改推送到仓库。这是我做的:

  1. 我创建了一个文件夹' test'与' hi.txt'在它。
  2. 我在文件夹' test'
  3. 中运行git init
  4. git add .
  5. git commit -m "done"
  6. cd ..
  7. git clone test newTest
  8. 我能够看到一个newTest克隆在里面创建了一个.git文件夹,并且从repo中克隆了hi.txt。

    然后我更改了克隆中的hi.txt并运行了以下命令:

    1. git add .
    2. git commit -m "done"
    3. 到目前为止一切顺利。现在,当我尝试将更改推送到repo' test'文件夹,我收到以下错误:

          $ git push
      Counting objects: 5, done.
      Writing objects: 100% (3/3), 248 bytes, done.
      Total 3 (delta 0), reused 0 (delta 0)
      Unpacking objects: 100% (3/3), done.
      remote: error: refusing to update checked out branch: refs/heads/master
      remote: error: By default, updating the current branch in a non-bare repository
      remote: error: is denied, because it will make the index and work tree inconsist
      ent
      remote: error: with what you pushed, and will require 'git reset --hard' to matc
      h
      remote: error: the work tree to HEAD.
      remote: error:
      remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
      
      remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
      
      remote: error: its current branch; however, this is not recommended unless you
      remote: error: arranged to update its work tree to match what you pushed in some
      
      remote: error: other way.
      remote: error:
      remote: error: To squelch this message and still keep the default behaviour, set
      
      remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
      To c:/test
       ! [remote rejected] master -> master (branch is currently checked out)
      error: failed to push some refs to 'c:/test'
      

      那我哪里错了?我误解了什么吗?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

第一个" repo"您创建的表现为工作副本,即非裸仓库。

Real Repos,你可以推送的那些,没有工作副本。他们只是引用了所有分支中的所有提交。

将正常仓库转换为裸仓库

  1. 在文件资源管理器中打开repo
  2. 确保您显示隐藏文件(否则,您将无法看到.git文件夹)
  3. 删除除.git文件夹
  4. 以外的所有内容
  5. 将.git文件夹中的所有内容移至根
  6. 删除空的.git文件夹
  7. 执行git config --bool core.bare true
  8. 现在你可以推送到你的裸仓库了。

    修改:使用问题中的步骤

    mkdir test
    cd test
    git init
    echo '0.0.1' > version.txt
    git commit -a -m "version file"
    

    现在你有一个非裸仓库,结构为

    enter image description here

    让我们把它变成一个简单的回购

    mv .git ../  
    rm *
    mv ../.git .
    mv .git/* .
    rm -rf .git
    git config --bool core.bare true
    

    现在你有一个裸仓库,其内容是

    enter image description here

    如果在某些时候出现错误fatal: This operation must be run in a work tree just ignore it

    现在你可以按照原来的方式克隆它

    cd ..
    git clone test newTest
    touch index.html
    git commit index.html -m "index file"
    git push