git拒绝进入当前分支

我build立了一个远程仓库,我可以推出新的更改,但是我无法从中获取,我总是得到(相当神秘的)错误信息:

fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository fatal: The remote end hung up unexpectedly 

这是什么意思? 我应该怎么做才能启用抓取?

(请注意,这个远程仓库只用作备份仓库,所以它应该是我的本地仓库的一个精确副本,我真的不明白为什么我可以推送它,但不能从它获取…)

我的configuration如下所示:

 [remote "origin"] url = ssh://blablablah fetch = +refs/*:refs/* mirror = true 

你想要做的是取得你正在工作的分支。 也就是说,您在主分支上,并尝试更新它。 这是不可能的。 更新remotes/*分支,然后将其放入本地remotes/*更为常见。 你想要的是,也许,

 git remote add otherrepo thehost:/the/path.git 

这将设置存储库被提取到remotes/otherrepo/*git fetch otherrepo应该做的伎俩。 Alternativeley,你可以手动编辑你的.git/config并设置远程的fetch类似于refs/heads/*:refs/remotes/otherrepo/*

如果有人发现这一点,因为他们特别想要进入当前分支,你可以使用--update-head-ok标志。 从文档 :

-u
–update头-OK
默认情况下,git fetch拒绝更新对应于当前分支的头部。 该标志禁用检查。 这纯粹是为了内部使用git pull与git fetch进行通信, 除非你正在实现自己的瓷器否则你不应该使用它。

在某些情况下,我们希望实施自己的瓷器命令,例如自动化和工具。

当我不小心克隆一个存储库而不是提取它时,我遇到了这个问题,所以这两个存储库都是主人。 (1)删除远程仓库,(2)将本地仓库复制到远程仓库,(3)删除远程仓库本地一个,然后(4)使用设置本地存储库

 git init; git fetch $REMOTE_GIT_REPOSITORY_URL 

然后git pullgit push会做正确的事情。 根据Michael的更高效和原则性的答案,避免git remote的好处是你不需要考虑追踪分支的语义。

此外,这应该工作,如果你在分支,并希望得到最新尝试这一点

git拉来源高手

你真的在命令行inputGit命令,还是从自己的代码运行Git可执行文件?
如果你是从代码运行它,你确定Git试图获取正确的本地目录?

有两种可能的方法来做到这一点:

  1. 在执行Git之前,使用编程语言提供的选项来设置正确的工作目录
    ( C#的例子 ,因为这就是我使用的)

  2. 总是将-Cparameter passing给Git来指定具有本地回购的目录。


我有一个项目,我从C#代码中调用Git可执行文件,当我不小心忘记设置-C parameter时,我得到了同样的错误信息。

我也有同样的问题。 首先,我尝试使用这个来获取

 git fetch [remote_name] [branch_name] 

我有你提到的同样的问题。 之后,我尝试了这个简单的命令。

 git pull [remote_name] [branch_name] 

注意将获取并合并更改。 如果你使用terminal然后文件打开,要求提交消息。 有了这个消息,你将推动最新的提交。 试试这个命令,最后你将能够推送请求。

 git push [remote_name] [branch_name_local]