git将新文件推送到一个裸仓库失败:“错误:src refspec master与任何匹配。”为什么?

时间:2016-12-26 04:22:12

标签: git push bare refspec

我正在尝试这个:

mkdir ~/gitremote
cd ~/gitremote
git init --bare

我可以看到像

这样的文件名
HEAD        config      hooks       objects
branches    description info        refs

好的,然后在另一个目录中,

git clone trosky@localhost:/Users/trosky/gitremote
vi readme (add one line)
git add .
git commit -m "1st file"
git push origin master

然后它出错:

$git push origin master
error: src refspec master does not match any.
error: failed to push some refs to 'trosy@localhost:/Users/trosky/gitremote'

我搜索了谷歌,它说这种错误是由于远程仓库上的空文件夹。但远程仓库不是空的,在本地我提交的文件也不是空的。为什么这个错误仍然会提示出来?

如何解决?感谢。

2 个答案:

答案 0 :(得分:3)

尝试使用语法:

git push -u origin master

由于您要推送空仓库,因此需要 explicitly push master
否则,default push.policy being simple,Git会在你的远程仓库中寻找一个名为master的分支(因为你的远程裸仓库是空的,它还没有master分支)

当然,你在远程裸仓库中看不到任何自述文件,因为它是一个简单的仓库:没有工作树。

  

' git clone / Users / trosky / gitremoe'之间的区别是什么?和' git clone&#t; trosy @ localhost:/ Users / trosky / gitremote'

一个是使用名为local protocol的文件协议,另一个是ssh protocol。你不需要在这里使用ssh。

答案 1 :(得分:0)

您可以改为使用git clone /Users/trosky/gitremote

git clone /Users/trosky/gitremote使用本地协议。由于您的remoterepo位于本地PC上,因此本地协议适用且速度快。

git clone 'trosy@localhost:/Users/trosky/gitremote'使用 scp 来传输主要用于不同设备数据传输的数据。

推送到远程仓库后,您可能会转到远程仓库文件夹但找不到推送的文件。但它确实存在。因为裸仓库没有工作目录。它存储在/Users/trosky/gitremote/objects中。您可以检查/Users/trosky/gitremote/refs/heads/master中的提交SHA-1是否符合本地存储。