Как обновить git clone --mirror?


144

Я создал git-репозиторий для зеркалирования живого сайта (который является непроходимым git-репозиторием):

git clone --mirror ssh://user@example.com/path/to/repo

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

Я бы хотел, чтобы все обновлялось: коммиты, ссылки, хуки, ветки и т. Д.

Спасибо!

Ответы:


213

Это команда, которую вам нужно выполнить на зеркале:

git remote update

@Magnus Skog: Отлично. Спасибо! Это все? Мне нужна другая команда, как git fetch? Или git remote updateодин сделает все это?
Дж. Бруни

11
Я тоже хотел бы знать, в чем разница с git fetch.
Турбьерн Равн Андерсен

1
@ Thorbjörn (вам придется иметь дело со шведским ö :)): Git fetch просто обновляет ваш репозиторий удаленными ссылками с пульта. Эта команда обновляет все в зеркальном хранилище.
ralphtheninja

4
Вот хороший ответ, который объясняет больше: stackoverflow.com/questions/3959924/…
ralphtheninja

16
'git remote update --prune' сделает все это, но удалит ветви, когда они будут удалены из исходного репозитория.
teeks99

8

Относительно коммитов, ссылок, веток и " и так далее ", Magnus answer просто работает ( git remote update).

Но, к сожалению, нет способа clone/ зеркала / update крючки , как я хотел ...

Я нашел эту очень интересную тему о клонировании / зеркалировании крючков:

http://kerneltrap.org/mailarchive/git/2007/8/28/256180/thread

Я научился:

  • Хуки не считаются частью содержимого хранилища.

  • Существует больше данных, таких как .git/descriptionпапка, которая не клонируется, так же как и хуки.

  • Крюки по умолчанию, которые появляются в hooksдиректории, происходят изTEMPLATE_DIR

  • На templategit есть эта интересная особенность.

Итак, я могу либо проигнорировать эту «вещь клонирования крючков», либо пойти на rsyncстратегию, учитывая цели моего зеркала (резервная копия + источник только для других клонов).

Ну ... я просто забуду о клонировании крючков и буду придерживаться git remote updateпути.

  • Сехе только что указал, что не только «хуки» не управляются процессом clone/ update, но также хранятся, перезаписываются и т. Д. Итак, для строгой резервной копии rsyncили ее эквивалента действительно стоит пойти. Поскольку в моем случае это не является действительно необходимым (я могу позволить себе не иметь крючков, тайников и т. Д.), Как я уже сказал, я буду придерживаться remote update.

Спасибо! Немного улучшил мой собственный "гитфу" ... :-)


5

Смотрите здесь: Git не клонирует все ветви на последующих клонах?

Если вы действительно хотите этого, потянув ветки вместо push --mirror, вы можете посмотреть здесь:

"fetch --all" в репозитории git bare не синхронизирует локальные ветви с удаленными

Этот ответ содержит подробные инструкции о том, как добиться этого относительно легко:


1
pushэто не вариант для меня, потому что мне нужно сделать это на принимающей стороне (откуда находится клон); pullэто также не вариант, потому что зеркальный репозиторий является пустым репозиторием (без рабочего дерева, следовательно, без «тяги») - кажется, что он git remote updateдействительно все делает (намного проще, чем ссылочный ответ) ... В любом случае, спасибо! Конечно, в связанных вопросах / ответах есть ценная информация.
Дж. Бруни

1
хорошо, я имел в виду тянуть как на обычном языке. Тяни и тяни технологии. Вряд ли есть другое слово, кроме бессмысленного «получать данные с удаленного устройства активно на клиенте», которое бы не дублировало слово, имеющее значение для систем git или DVCS :) Вторая ссылка предоставит вам необходимые детали. Обратите внимание, что «мерзавец удаленного обновление» это не на самом деле поддерживать статус «зеркальный» без дополнительных операций упоминаются там
sehe

1
хм ... извините (HTH) - кажется, что "абсолютное" зеркало легче достичь с помощью простого "rsync" из исходной папки репо ... не то, что я хотел, но ... я только что провёл несколько тестов ... и ничто, кажется, не копирует крючки - что мне особенно интересно ...
Дж. Бруни

1
К вашему сведению, цели этого зеркала следующие: 1) полное резервное копирование, из которого я могу восстановить данные в случае потери данных на исходном сервере репо; 2) откуда-то, откуда другие могут клонировать и получить локальное рабочее репо, не имея доступа к исходному репо
Дж. Бруни

1
Если вам нужны крючки и все остальное, то у гитоза может быть (не помню хорошо) то, что вам нужно, но я бы пошел rsyncв этом случае. Кроме того, я предполагаю, что вы забыли о тайниках (см. Здесь ) и перебираете информацию тоже ...?
sehe
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.