Ответы:
Если вы хотите дублировать все объекты из основного репо, сделайте это внутри основного репо:
git push --all <url-of-bare-repo>
В качестве альтернативы выполните выборку внутри открытого репо:
git fetch <url-of-main-repo>
Вы не можете выполнить вытягивание, потому что пул хочет слиться с ним HEAD, чего нет в голом репо.
Вы можете добавить их как пульты дистанционного управления, чтобы не печатать в будущем:
git remote add <whatever-name> <url-of-other-repo>
Тогда вы можете просто сделать
git push --all <whatever-name>
или
git fetch <whatever-name>
в зависимости от вашего репо. Если <whatever-name> есть origin, то вы можете даже оставить его в целом.
Отказ от ответственности: я не мерзавец. Если я сказал что-то не так, я хотел бы быть просветленным!
Обновление: читайте комментарии!
git-fetch --allвнутри голого репозитория, я не видел обновлений, которые я сделал для основного репо, но когда я нажимаю их из основного репозитория с помощью, git push --all <url-of-bare-repo>я вижу обновления в git log. По-видимому, этому есть простое объяснение - может кто-нибудь объяснить?
git logчто эти обновления не отображаются в чистом репо. (Ни то git log --all, ни другое не делает , как и рабочее репо, созданное путем клонирования чистого репо - либо через, git log --allлибо просто просматривая новые файлы, которые должны там появиться). Это довольно быстрый тест, чтобы убедиться в этом. В основном мне просто любопытно, что мне не хватает.
git fetch -q origin master:masterвнутри своего локального голого репо. Это приведет к получению нового материала из главной ветки github и обновлению вашей локальной главной ветки.
master:masterэто то, что требуется для перемещения HEAD вперед к заголовку удаленного репо. В моем случае из-за проблемы я больше не мог подключиться к нашему голому репо, потому что отсутствовал git. Пока он не будет решен, я использую обратный туннель и получаю данные в центральном репо, используя: git fetch ssh://localhost:8765/... master:masterи это работает как шарм. Спасибо!
git fetch origin *:*
Я создал репозиторий, используя следующую команду
git clone --bare <remote_repo>
Затем я попытался обновить голый клон, используя ответ Томаса, но у меня это не сработало. Чтобы обновить чистый репозиторий (как я думаю, Let_Me_Be просил), мне пришлось создать зеркальный репозиторий:
git clone --mirror <remote_repo>
Затем я мог запустить следующую команду в зеркальном репозитории, чтобы получить обновления основного репозитория:
git fetch --all
Я наткнулся на это решение, прочитав Зеркало репозитория Git, потянув
[remote "origin"]разделе добавляем fetch = +refs/*:refs/*иmirror = true
Единственное решение помимо воссоздания с git clone --mirror - от Грегора :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
тогда вы сможете, git fetchи вы увидите обновления. Странно то, что до этого, даже при наличии remoteнастроенного, в нем не было веток, перечисленных в git branch -a.
git remote updateвыполнение работы.
--forceи --pruneсоответственно в git fetchстроку.
Предполагая, что:
$ git clone --bare https://github.com/.../foo.git
Получить с:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Примечание: --git-dir=foo.gitне требуется, если вы cdсначала зашли в каталог.
originне определено, вы всегда можете заменить originчасть на путь / URL-адрес вашего исходного репозитория. eg$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
После долгих экспериментов я обнаружил, что это работает для меня.
Однажды:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Каждый раз, когда я хочу синхронизировать:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*') - это ключ. Хороший ответ, спасибо!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'- это ответ. После нажатия этой команды я могу просто git fetchсинхронизировать репо с удаленным.
Добавьте чистый репозиторий в качестве удаленного репозитория, затем используйте git push.
Для меня эта комбинация сработала:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
-u параметр для выборки был необходим, в противном случае я получаю сообщение об ошибке: «Отказ от выборки в текущую ветку refs / Heads / master не-голого репозитория» (см. также https://stackoverflow.com/a/19205680/4807875 )