Если вы изучите файлы конфигурации (.git/config
) на предмет хорошего клона по сравнению с не очень хорошим оригиналом, вы увидите, что у одного из них - хорошего - есть запись, которая читает более или менее :
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
Не очень хороший пропускает эту настройку fetch =
.
Отсутствие параметра fetch = ...
объясняет, почему git fetch
в не очень хорошем хранилище никогда не создает origin/master
. Он вызывает Git на origin
, видит, что у другого Git есть master
, и переносит любые коммиты, которые у них есть, которых у вас нет ... и затем не create origin/master
потому что ничего не говорит ему сделать это. Вы видите:
* branch master -> FETCH_HEAD
Напротив, в хорошем репозитории запуск git fetch
вызывает Git в origin
, видит, что у другого Git есть master
, переносит любые коммиты, которые у них есть, которые вы не делаете ... и затем создает или обновляет origin/master
в соответствии с настройкой fetch =
.
Запуск git clone
создает настройку извлечения. Запуск git remote add origin <em>url</em>
создаст его - так что комментарий shams.kool , предлагающий удалить, а затем заново создать origin
, будет работать, но запуск git remote set-url origin <em>url</em>
не создаст настройки выборки.
Или вы можете просто поручить вашему Git создать эту настройку:
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
Например,
в bash (или отредактируйте файл конфигурации непосредственно в подходящем редакторе).