При нажатии веток и тегов возникает ошибка: не удается создать git: нет такого файла или каталога

У меня есть существующий пустой репозиторий Git, созданный путем импорта нашего исходного кода и истории из CVS. Я делаю зеркало, используя:

git clone --mirror git://aserver.adomain.com/myrepo

Затем я хочу отправить все ветки и теги на наш внутренний хост-репозиторий Git, но отправка, похоже, не видит голый репозиторий как репозиторий Git.

Я пробовал следующее:

git clone --mirror git://aserver.adomain.com/myrepo
git remote set-url origin http://[email protected]/project/myrepo.git
git push origin

что приводит к:

$ git push origin
Password for 'xxxx':
error: cannot spawn git: No such file or directory

или я пытаюсь:

$ git remote rm origin
Note: Some branches outside the refs/remotes/ hierarchy were not removed;
to delete them, use:
  ...a whole lot of branches...

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ ls
HEAD  config  description  hooks  info  objects  packed-refs  refs

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git branch -a
  ...a whole lot of local branches...

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git remote add mygithost http://[email protected]/project/myrepo.git

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git push --all mygithost
Password for 'xxxx':
error: cannot spawn git: No such file or directory

Что означает «не может породить git»?

Как я могу отправить голый репо со всеми ветками в пустой существующий?

Я погуглил несколько возможностей и рассмотрел несколько проблем SO, но не вижу решения этой проблемы. Ясно, что мое понимание этого процесса ошибочно.

Обновлять

Думаю, мое понимание не было ошибочным. Ошибка каким-то образом заставила меня подумать, что что-то не так с голым репозиторием, так как я мог клонировать и ветку за веткой просто отлично из «обычных» клонов.

Как оказалось, это ошибка в MSysGit. Я перешел на Linux, потому что в моем случае сохранение всей истории было требованием. Я не мог просто удалить ветки и теги, так как их нужно было отправить в пустой удаленный репозиторий. Итак, сработало следующее:

$ git remote rm origin
$ git clone --mirror git://aserver.adomain.com/myrepo
$ cd /some/path/myrepo.git
$ git remote add mygithost http://[email protected]/project/myrepo.git
$ git push --all mygithost
$ git push --tags mygithost

person kevinmm    schedule 14.02.2013    source источник
comment
Вы используете MSysGit? Известно, что это происходит, если у вас есть большое количество тегов. См. groups.google.com/forum/#!msg/msysgit/6bFAPUQDQLI. /USrCnnZ4x5QJ   -  person Neil Forrester    schedule 14.02.2013
comment
Да. Это может быть полезно. Я попробую это из Linux.   -  person kevinmm    schedule 14.02.2013
comment
Это было именно так. Из линукса работало нормально. Пожалуйста, опубликуйте это как ответ, чтобы я мог его принять.   -  person kevinmm    schedule 14.02.2013


Ответы (4)


Поскольку этот комментарий привел к решению (см. редактирование в конце вопроса), здесь он размещен как ответ:

Вы используете MSysGit? Известно, что это происходит, если у вас есть большое количество тегов. См. эту запись.

person Neil Forrester    schedule 20.02.2013
comment
Как ни странно, я столкнулся с другой проблемой большого количества тегов при попытке клонирования с использованием http. Клон отлично работал с протоколом git, но из http выдавал: error: could not spawn git: no such file or directory. Я использовал 1.7.8, и переход на 1.8.1 решил эту проблему. Я не смог найти проблемы в системе отслеживания ошибок MSysGit, но, возможно, проблемы с тегами были решены? - person kevinmm; 22.02.2013
comment
Спасибо! Я столкнулся с той же ошибкой (ошибка: не удается создать git: такого файла или каталога нет), и даже обновление до последней версии msysgit (1.9.2) не помогло, но я выполнил ту же команду git push kiln --tags с моей виртуальной машины Linux. сделал трюк. - person rob; 27.05.2014

Согласно этому сообщению, основная проблема заключается в том, что git ведет себя неправильно, если устанавливается в каталог с пробелами в пути. Это соответствует моей среде, в которой я столкнулся с ошибкой и сообщением об ошибке.

Думаю, такое поведение неудивительно, учитывая, что изначально git был написан автором Linux. Типичный обходной путь, по-видимому, заключается в использовании операционной системы, которая враждебно относится к пробелам в именах путей.

person Jason R. Coombs    schedule 05.02.2015
comment
Нет! Не только. Я переустановил git, и проблема не устранена. Количество тегов может быть. - person it3xl; 18.05.2015

У меня также есть эта проблема из-за большого количества тегов при использовании git в Windows. Я решил эту проблему, создав пакетный скрипт, который проталкивал некоторые теги по одному, пока количество тегов не стало немного меньше 500. Затем я смог создать git push, выполнение которого заняло некоторое время, но сработало.

Таким образом, вы просто открываете блокнот, пишете git push origin <yourtagname> для каждого тега, который хотите отправить, по одному в строке, сохраняете его как blabla.bat в папке репозитория git и запускаете его. Будет еще проще, если вы просто скопируете все имена файлов из папки тегов .git\refs\tags и сделаете некоторую замену, добавив git push origin перед каждым именем файла.

person user1151923    schedule 15.10.2015

Я столкнулся с той же проблемой (не могу создать git: нет такого файла или каталога) при попытке отправить на сервер stash/bitbucket git какой-то большой проект, экспортированный из TFS (в локальной папке git на компьютере). Там была одна ветка и много тегов (3K+ тегов). Проблема возникает при нажатии всех команд тегов, в то время как нажатие одного тега работает нормально. Я использую GitExtensions (на основе msysgit), а подключение к удаленному серверу было http.

Решение появилось неожиданно: я перенастроил свой git на использование SSH-подключения к удаленному серверу вместо http, и это чудесным образом решило проблему: отправка всех тегов прошла успешно.

person Vladimir Onishchuk    schedule 27.01.2016