2

遵循这个(使用 Git 处理离线和在线开发的最佳方式)问题,我决定尝试一下,并使用 pendrive 作为我的遥控器。但我可能会遗漏一些东西,因为我无法提交更改。

我在 pendrive 的一个目录中有一个名为“arvores”的存储库,我从 github.com 克隆了它。

现在,我有另一个本地目录,我克隆了 pendrive 的目录。

$ git clone f:/pendrive/arvores
Cloning into 'arvores'...
done.`

然后我更改了一个文件以测试我是否可以推送和提交更改,但我收到此错误消息。

$ git add .htaccess

$ git commit
[master 40eeccf] teste
1 file changed, 9 deletions(-)

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
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 inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
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 f:/pendrive/arvores
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'f:/pendrive/arvores'    
4

2 回答 2

3

就像 knittl 所说,问题在于 pendrive 中的存储库不是裸机,您无法将更改推送到非裸机存储库(默认情况下)。

在 pendrive 中,你应该已经执行了:

git clone --bare github_repo

会将 github_repo克隆到一个裸存储库中。然后,您将能够正常地从/向该存储库进行克隆和推送。


您可能应该调查并了解 git 的工作原理。特别是关于裸存储库和非裸存储库。

存储库不是空存储库。这是一个没有“工作树”的存储库。当您运行git clone repo(非裸机)时,您将在创建的文件夹中不仅看到最后一次提交的文件(即工作树),而且还有一个隐藏的“.git”文件夹。该文件夹包含整个存储库(所有提交、分支、标签……)。当你运行git clone --bare repo(裸机)时,你只会得到那个“.git”文件夹(没有工作树)。

于 2013-10-14T13:39:59.833 回答
1

据我所知,您有两个选择:

  1. 从 github 克隆一个裸仓库到您的 pendrive,然后像往常一样将此仓库克隆到您的工作机器上(正如Bruno Nova和其他人已经建议的那样。)

  2. 像你一样将 repo 克隆到你的 pendrive,不要在你的工作机器上克隆它。只需将其插入并使用 pendrive 目录上的工作目录即可。

第二个选项是您链接到的问题中的建议工作流程。

于 2013-10-14T14:12:04.453 回答