Как мне обновить мой голый репо? - PullRequest
113 голосов
/ 01 августа 2010

Я создал пустое хранилище для публикации своего репозитория, но не могу понять, как обновить пустое хранилище с текущим состоянием основного хранилища.

Ответы [ 6 ]

68 голосов
/ 01 августа 2010

Если вы хотите дублировать все объекты из основного репо, сделайте это внутри основного репо:

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, вы можетедаже вообще не обращайте на это внимания.

Отказ от ответственности: я не гитарный гуру.Если я сказал что-то не так, я бы хотел быть просвещенным!

Обновление: читайте комментарии!

62 голосов
/ 21 мая 2011

Я создал хранилище с помощью следующей команды

git clone --bare <remote_repo>

Затем я попытался обновить голого клона, используя ответ Томаса, но у меня это не сработало. Чтобы обновить пустой репозиторий (о чем, я думаю, спрашивал Let_Me_Be), мне пришлось создать зеркальный репозиторий:

git clone --mirror <remote_repo>

Тогда я мог бы запустить следующую команду в зеркальном хранилище, чтобы получить обновления основного хранилища:

git fetch --all

Я наткнулся на это решение, прочитав Зеркальное отображение хранилища Git, потянув

46 голосов
/ 25 июля 2013

Единственное решение, кроме воссоздания с git clone --mirror, это от Грегора :

git config remote.origin.fetch 'refs/heads/*:refs/heads/*'

, тогда вы можете git fetch, и вы увидите обновления.Странно то, что до этого, даже если настроен remote, у него нет веток, перечисленных в git branch -a.

37 голосов
/ 03 октября 2014

Предполагается:

$ 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 сначала в каталог.

8 голосов
/ 09 октября 2013

После долгих раздумий я обнаружил, что это работает для меня.

Один раз:

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
3 голосов
/ 01 августа 2010

Добавьте пустой репозиторий в качестве удаленного репозитория, затем используйте git push.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...