Git错误:源参考(refspec)的master不符合任何内容

267

我需要创建一个名为 carboncake 的仓库。

我尝试了以下操作:

将gitosis-admin仓库克隆到我的本地机器上。

$ git clone gitosis@myserver.net:repositories/gitosis-admin.git
$ cd gitosis-admin
$ vim gitosis.conf

在文件末尾添加了[repo carboncake][group carboncake]部分。

[gitosis]

[group team]
writable = sweepshots
members = git_id_rsa

[group gitosis-admin]
writable = gitosis-admin
members = git_id_rsa

[repo carboncake]
description = A brand new app by Mithun.
owner = Mithun P

[group carboncake]
writable = myappname
members = mithun @core

然后复制了由Putty生成的公钥文件(我正在使用Windows下的Git bash):

$cp /some/where/mithun.pub keydir/mithun.pub

执行以下命令:

$ git add gitosis.conf keydir/mithun.pub
$ git commit -m "Added 'carboncake' repository and 'mithun' user."

$ git pull --rebase
$ git push

但它在我的服务器上没有创建任何 carboncake.git。

所以我遵循了以下步骤:

在服务器上执行了以下命令:

$ su gitosis 
$ git init --bare /srv/gitosis/repositories/carboncake.git

我的问题是:

我尝试从本地机器中检出/克隆新的存储库。

$ mkdir carboncake
$ cd carboncake
$ git init 
$ touch a_text_file.txt 
$ git add a_text_file.txt 
$ git remote add origin gitosis@myserver.net:repositories/carboncake.git
$ git push origin master

返回了以下错误:

error: src refspec master does not match any.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'gitosis@myserver.net:repositories/carboncake.git'

我尝试使用git push origin HEAD:master命令,但它返回了以下错误:

error: src refspec HEAD does not match any.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'gitosis@myserver.net:repositories/carboncake.git'

当我尝试执行git push origin master:refs/heads/master时,出现了以下错误:

error: src refspec master does not match any.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'gitosis@myserver.net:repositories/carboncake.git'

在本地机器上运行git show-ref不会显示任何内容。

另外,在服务器上/srv/gitosis/repositories/carboncake.git/refs/heads/目录为空。

我该如何解决这个问题?


对于从Google进入此处的人,您可能只需要更新git。过时的版本有时会在您尝试推送更改时导致奇怪的错误。 - Pikamander2
这里一个微不足道的错误是“git push origin master”与“git push origin main”的区别... - Fattie
2个回答

617

你已经创建了一个新的代码库并将一些文件添加到索引中,但你还没有创建第一次提交。完成以下步骤后:

 git add a_text_file.txt 

...做:

 git commit -m "Initial commit."

...这样那些错误就会消失。


122
git 有一些糟糕的错误信息。 - Justin Skiles
完全正确,我也遇到了同样的错误信息,后来意识到我还没有进行暂存和提交。这意味着我刚刚点赞了这个帖子,点了一个赞。 - blakroku
2
很遗憾,这些步骤对我的情况没有帮助。在执行这些步骤后,我遇到了另一个错误:“fatal: Unable to create 'C:/Users/myname/Desktop/work/xamarin/myproj-vs2015/.git/index.lock': File exists.” 接下来是“Another git process seems to be running in this repository, e.g. an editor opened by 'git commit'. Please make sure all processes are terminated then try again. If it still fails, a git process may have crashed in this repository earlier: remove the file manually to continue.” 我没有其他进程,并尝试删除 .git 和 .git/index.lock 文件多次。 - pixel
5
请先尝试使用命令 git branch "branch-name" - Mohammad Mahdi KouchakYazdi
显示剩余2条评论

25

简单的答案是:当你第一次成功地克隆一个空的Git存储库时,远程源(origin)没有 master 分支。所以第一次提交并推送代码时,你必须执行以下操作:

git push origin master

这将为您创建一个新的主分支。在git中,这样的小事情非常容易混淆。

如果这没有解决您的问题,那么可能是与gitolite相关的问题:

您的conf文件看起来很奇怪。您的gitolite应该附带了一个示例conf文件。我的文件看起来像这样:

repo    phonegap                                                                                                                                                                           
    RW+     =   myusername otherusername                                                                                                                                               

repo    gitolite-admin                                                                                                                                                                         
    RW+     =   myusername                                                                                                                                                               
请确保您已正确设置配置文件。
实际上,Gitolite会使用修改后的shell替换gitolite用户帐户,该shell不接受交互式终端会话。您可以尝试使用gitolite用户帐户ssh进入您的服务器,以查看是否正常工作。如果它知道您是谁,它会说类似于“Hi XYZ,您有权限访问以下存储库:X、Y、Z”,然后关闭连接。如果它不认识您,它将直接关闭连接。
最后,在本地机器上第一次git push失败后,请不要手动在服务器上创建仓库。我们需要知道您的git push最初失败的原因。一旦您设置好了gitolite,请务必专门使用它,否则可能会导致自己和gitolite更多的混乱。

他使用的是gitosis而不是gitolite,顺便说一句。 - user153275
1
我遇到了这个问题,执行 git push origin master 命令时打印出相同的错误。 - olenscki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接