git push new file to bare repo не удалось: "ошибка: мастер src 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'

Я искал в Google, и он говорит, что такого рода ошибки из-за пустой папки на удаленном репо. Но удаленное хранилище не пусто, и локально я также фиксирую файл, который не пуст. Почему эта ошибка все еще выдает?

Как это исправить? Благодарю.

2 ответа

Решение

Попробуйте с синтаксисом:

git push -u origin master

Поскольку вы продвигаетесь к пустому репо, вам нужно явно master,
В противном случае по умолчанию push.policy являющийся simple, Git будет искать ветку с именем master в вашем удаленном репо (и поскольку ваше удаленное репо пусто, оно не имеет master ветки пока нет)

Конечно, вы не увидите никаких readme в вашем удаленном репо, поскольку это просто репо: нет рабочего дерева.

в чем разница между 'git clone /Users/trosky/gitremoe' и 'git clone 'trosy@localhost:/Users/trosky/gitremote'

Один использует протокол файла, также называемый локальным протоколом, другой протокол ssh. Вам не нужен SSH здесь.

Ты можешь использовать git clone /Users/trosky/gitremote вместо.

git clone /Users/trosky/gitremote используется локальный протокол. Поскольку ваш удаленный репозиторий находится на локальном ПК, локальный протокол подходит и работает быстро.

git clone 'trosy@localhost:/Users/trosky/gitremote' используется scp для передачи данных, которые в основном используются для передачи данных различных устройств.

После того, как вы нажмете на удаленное репо, вы можете перейти в папку удаленного репо, но не найдете загруженный файл. Но это на самом деле существует. Потому что в голом репо нет рабочего каталога. Он хранится в /Users/trosky/gitremote/objects, И вы можете проверить фиксацию SHA-1 в /Users/trosky/gitremote/refs/heads/master в соответствии с местным репо.

Другие вопросы по тегам