“Нажатие мерзавца - зеркало”, достаточное для резервного копирования моего репозитория?

Я - сольный разработчик, работающий в локальном репозитории Мерзавца. Для резервных копий я хочу отослать точную копию того репозитория к другому серверу.

Действительно ли достаточно сделать это?

git push --mirror

Я спрашиваю, потому что я могу иногда выполнять эту команду два или три раза, прежде чем Мерзавец скажет мне "Все актуальное", так по-видимому, это не точное зеркало. Это, кажется, повторно продвигает ответвления отслеживания...?

$ git push --mirror
Counting objects: 42, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (30/30), done.
Writing objects: 100% (30/30), 5.09 KiB, done.
Total 30 (delta 17), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  mybranch -> mybranch
$ git push --mirror
Total 0 (delta 0), reused 0 (delta 0)
To ssh://my/repo/url
   c094a10..0eedc92  origin/mybranch -> origin/mybranch
$ git push --mirror
Everything up-to-date

Что происходит, и действительно ли это - хорошая стратегия?

Править: Мне не нравится использовать что-то как git bundle или .tar.bz2 архивы, потому что я хотел бы, чтобы резервное копирование было доступной рабочей копией. Так как мой сервер резервного копирования подключен к сети и всегда на, это - хороший способ получить доступ к репозиторию, когда я нахожусь на дороге.

52
задан Thomas 26 July 2010 в 20:02
поделиться

6 ответов

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

РЕДАКТИРОВАТЬ: Я только что видел ваше обновленное описание в вопросе. Кажется, что git подталкивает ваш удаленный ref к самому пульту вместе со всем остальным. После завершения отправки удаленная ссылка будет обновлена, чтобы отразить то, что вы только что отправили на нее. Теперь это будет устаревшим для удаленного репозитория, поэтому необходимо дальнейшее продвижение. Если это вас не устраивает. Вы можете удалить эту удаленную ссылку с помощью

git push: origin / mybranch

, а затем использовать

git push --all

, помните, что при этом не будут выталкиваться какие-либо новые ветки, которые вы создаете.

8
ответ дан 7 November 2019 в 09:29
поделиться

В том же духе, что и ответ Amber, вы можете:

1
ответ дан 7 November 2019 в 09:29
поделиться

Причина, по которой вы видите, что что-то перемещается во второй раз, заключается в том, что - mirror подталкивает немного больше, чем вы ожидаете. Помимо ваших локальных веток, он также подталкивает ваши удаленные ветки, потому что зеркало подразумевает все . Поэтому, когда вы нажимаете в обычном режиме (или с помощью - mirror ), mybranch нажимается, а origin / mybranch обновляется, чтобы отразить новый статус в origin. Когда вы нажимаете с помощью - mirror , также нажимается origin / mybranch .

Это приводит к странности, которую вы видите, а также к еще большей странности, когда вы тянете от этого пульта дистанционного управления; вы получите ветки с именем origin / origin / mybranch и т. д. Поэтому обычно лучше использовать - mirror для одноразовых копий и просто использовать обычную отправку (возможно, с - -all ) для обычного использования.

Чтобы всегда отправлять все ветки и теги, вы можете обновить .git / config следующим образом:

[remote "origin"]
  url = ...
  fetch = ...
  push = +refs/heads/*
  push = +refs/tags/*

Это сделает обычное нажатие, похожее на зеркало, за исключением того, что оно не удалит ветки, которые не существуют в источнике или для обновлений без перемотки вперед.

31
ответ дан 7 November 2019 в 09:29
поделиться

К сожалению, вы не можете получить точную копию с толкать. Вы теряете свой тайник .

24
ответ дан 7 November 2019 в 09:29
поделиться

Почему бы просто не сжать копию .git и отправить ее на другой сервер?

0
ответ дан 7 November 2019 в 09:29
поделиться

Обычно я использую git push --all . Я использую --mirror только тогда, когда мне нужно подтолкнуть вновь созданные ветки или я удалил некоторые ветки и не хочу называть их одну за другой. В противном случае push --all обычно работает так, как мне нужно.

4
ответ дан 7 November 2019 в 09:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: