在最后提出我自己的问题之前,我经历了其他类似的问题。
我开始学习Git,我尝试了一些非常简单的事情。我的目标是在我的本地机器上创建一个repo,将其克隆到我本地机器的一个文件夹中。对克隆中的文件进行更改。将更改推送到仓库。这是我做的:
git init
git add .
git commit -m "done"
cd ..
git clone test newTest
我能够看到一个newTest克隆在里面创建了一个.git文件夹,并且从repo中克隆了hi.txt。
然后我更改了克隆中的hi.txt并运行了以下命令:
git add .
git commit -m "done"
到目前为止一切顺利。现在,当我尝试将更改推送到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'
那我哪里错了?我误解了什么吗?非常感谢你的帮助。
答案 0 :(得分:4)
第一个" repo"您创建的表现为工作副本,即非裸仓库。
Real Repos,你可以推送的那些,没有工作副本。他们只是引用了所有分支中的所有提交。
将正常仓库转换为裸仓库
git config --bool core.bare true
现在你可以推送到你的裸仓库了。
修改:使用问题中的步骤
mkdir test
cd test
git init
echo '0.0.1' > version.txt
git commit -a -m "version file"
现在你有一个非裸仓库,结构为
让我们把它变成一个简单的回购
mv .git ../
rm *
mv ../.git .
mv .git/* .
rm -rf .git
git config --bool core.bare true
现在你有一个裸仓库,其内容是
如果在某些时候出现错误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