Когда я делал git-fetch --allвнутри голого репозитория, я не видел обновлений, которые я сделал для основного репо, но когда я нажимаю их из основного репозитория с помощью, git push --all <url-of-bare-repo>я вижу обновления в git log. По-видимому, этому есть простое объяснение - может кто-нибудь объяснить?
pho79 01
2
@Thomas - Да, под "не видел" я имел в виду, git logчто эти обновления не отображаются в чистом репо. (Ни то git log --all, ни другое не делает , как и рабочее репо, созданное путем клонирования чистого репо - либо через, git log --allлибо просто просматривая новые файлы, которые должны там появиться). Это довольно быстрый тест, чтобы убедиться в этом. В основном мне просто любопытно, что мне не хватает.
pho79
71
Если ваше удаленное репо похоже на github, где у вас нет доступа, вы не можете запустить push и т. Д., Вы можете сделать это git fetch -q origin master:masterвнутри своего локального голого репо. Это приведет к получению нового материала из главной ветки github и обновлению вашей локальной главной ветки.
Altreus
4
@Altreus В самом деле, master:masterэто то, что требуется для перемещения HEAD вперед к заголовку удаленного репо. В моем случае из-за проблемы я больше не мог подключиться к нашему голому репо, потому что отсутствовал git. Пока он не будет решен, я использую обратный туннель и получаю данные в центральном репо, используя: git fetch ssh://localhost:8765/... master:masterи это работает как шарм. Спасибо!
estani
3
@Altreus Если вам нужны все ветки, вы можете сделать этоgit fetch origin *:*
JBert
71
Я создал репозиторий, используя следующую команду
git clone --bare <remote_repo>
Затем я попытался обновить голый клон, используя ответ Томаса, но у меня это не сработало. Чтобы обновить чистый репозиторий (как я думаю, Let_Me_Be просил), мне пришлось создать зеркальный репозиторий:
git clone --mirror <remote_repo>
Затем я мог запустить следующую команду в зеркальном репозитории, чтобы получить обновления основного репозитория:
Чтобы изменить существующее голое репо на зеркало, все, что вам нужно сделать, это добавить 2 строки в файл конфигурации git в <REPO> .git / config. В [remote "origin"]разделе добавляем fetch = +refs/*:refs/*иmirror = true
Исаак Бетеш
@IsaacBetesh Ты спас мне день :)
smc
54
Единственное решение помимо воссоздания с git clone --mirror - от Грегора :
тогда вы сможете, git fetchи вы увидите обновления. Странно то, что до этого, даже при наличии remoteнастроенного, в нем не было веток, перечисленных в git branch -a.
Это действительно помогло мне! Проект / репозиторий Capistrano также использует этот параметр, чтобы разрешить однострочное git remote updateвыполнение работы.
Minqi Pan
1
Если на пульте дистанционного управления есть принудительно обновленные или удаленные ветки (и вы хотите отразить эти изменения), вам может потребоваться добавить --forceи --pruneсоответственно в git fetchстроку.
Хотя я не знаю, когда это произойдет, если originне определено, вы всегда можете заменить originчасть на путь / URL-адрес вашего исходного репозитория. eg$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
antak
Это именно то, что я искал. Это сработало отлично.
Максим Руиллер
13
После долгих экспериментов я обнаружил, что это работает для меня.
Как сказал @peterh, линия git config remote.origin.fetch 'refs/heads/*:refs/heads/*'- это ответ. После нажатия этой команды я могу просто git fetchсинхронизировать репо с удаленным.
joker
3
Добавьте чистый репозиторий в качестве удаленного репозитория, затем используйте git push.
Итак, если я хочу сделать это, не нажимая, я не могу использовать чистый репозиторий и использовать символическую ссылку или что-то в этом роде?
Шимон Тот,
Распространение - это нормальный метод переноса содержимого репозитория в чистый репозиторий, этого не нужно избегать.
Филипп
2
Вы не всегда можете давить. Например, если голое хранилище находится в частной сети, а основные репозитории являются общедоступными (например, на GitHub)
-u параметр для выборки был необходим, в противном случае я получаю сообщение об ошибке: «Отказ от выборки в текущую ветку refs / Heads / master не-голого репозитория» (см. также https://stackoverflow.com/a/19205680/4807875 )
Ответы:
Если вы хотите дублировать все объекты из основного репо, сделайте это внутри основного репо:
В качестве альтернативы выполните выборку внутри открытого репо:
Вы не можете выполнить вытягивание, потому что пул хочет слиться с ним
HEAD
, чего нет в голом репо.Вы можете добавить их как пульты дистанционного управления, чтобы не печатать в будущем:
Тогда вы можете просто сделать
или
в зависимости от вашего репо. Если
<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, потянув
источник
[remote "origin"]
разделе добавляемfetch = +refs/*:refs/*
иmirror = true
Единственное решение помимо воссоздания с
git clone --mirror
- от Грегора :тогда вы сможете,
git fetch
и вы увидите обновления. Странно то, что до этого, даже при наличииremote
настроенного, в нем не было веток, перечисленных вgit branch -a
.источник
git remote update
выполнение работы.--force
и--prune
соответственно вgit fetch
строку.Предполагая, что:
Получить с:
Примечание:
--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 config remote.origin.fetch 'refs/heads/*:refs/heads/*'
) - это ключ. Хороший ответ, спасибо!git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
- это ответ. После нажатия этой команды я могу простоgit fetch
синхронизировать репо с удаленным.Добавьте чистый репозиторий в качестве удаленного репозитория, затем используйте
git push
.источник
Для меня эта комбинация сработала:
-u параметр для выборки был необходим, в противном случае я получаю сообщение об ошибке: «Отказ от выборки в текущую ветку refs / Heads / master не-голого репозитория» (см. также https://stackoverflow.com/a/19205680/4807875 )
источник